如何使用flask和mongoengine构建帐户验证系统

时间:2014-09-28 18:25:32

标签: python mongodb flask mongoengine

我通过阅读书籍http://flaskbook.com/#来学习Flask(我在下面发布的一些代码来自本书中的示例)但是我想使用mongodb作为数据库,所以我使用了烧瓶-mongoengine扩展。实际上,我正在尝试构建一个帐户验证系统,您可以在下面找到我的源代码:

from flask.ext.mongoengine import MongoEngine
from werkzeug.security import generate_password_hash
from flask.ext.login import UserMixin

app = Flask(__name__)
db = MongoEngine(app)

class User(UserMixin, db.Document):
    email = db.StringField(required=True, unique=True)
    username = db.StringField(required=True, unique=True, max_length=50)
    password_hash = db.StringField(max_length=128)

    @property
    def password(self):
        raise AttributeError('Password is not a readable attribute!')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

以下你可以在shell中看到我的问题:

>>> from my_app import User
>>> u = User(email='example@mail.com', username='bestuser', password='ciao')
>>> u.password_hash
>>> "no output here"

但如果我喜欢这样:

>>> u.password = 'ciao'
>>> u.password_hash
'pbkdf2:sha1:1000$39qJ6zDT$4f2a446acc7205ad53f0b5cc5409b2d9420c29a5'

它运作正常。

所以我实际上并不知道如何解决这个问题。每个建议都非常受欢迎。 提前感谢您,如果您需要更多信息,请询问。

1 个答案:

答案 0 :(得分:0)

您可能需要创建一个明确的__init__方法 - 类似于SQLAlchemy。

def __init__(self, email, username, password):
    self.email = email
    self.username = username
    self.password = password

然后你应该得到正确的行为。