【问题标题】:How to build a account validation system with flask and mongoengine如何用flask和mongoengine搭建账户验证系统
【发布时间】:2014-09-28 18:25:32
【问题描述】:

我正在通过阅读http://flaskbook.com/# 这本书来学习 Flask(我在下面发布的一些代码取自书中的示例),但我想使用 mongodb 作为数据库,所以我使用了 flask-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'

它工作正常。

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

【问题讨论】:

    标签: python mongodb flask mongoengine


    【解决方案1】:

    您可能必须创建一个显式的__init__ 方法——类似于 SQLAlchemy。

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

    那么你应该得到正确的行为。

    【讨论】:

    • 非常感谢您的回答,但如果我确实像您所说的那样,我会收到另一个错误:AttributeError: 'User' object has no attribute '_data'
    猜你喜欢
    • 2022-01-16
    • 2014-11-12
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2021-07-25
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多