2014-09-28 96 views
0

我正在通过阅读本书http://flaskbook.com/#(我在下面发布的一些代码摘自本书中的示例)学习烧瓶,但我想使用mongodb作为数据库所以我使用烧瓶 - mongoengine扩展。其实,我试图建立一个帐户验证系统,你可以在下面找到我的源代码:如何使用烧瓶和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='[email protected]', username='bestuser', password='ciao') 
>>> u.password_hash 
>>> "no output here" 

但如果我不喜欢即:

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

它工作正常。

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

回答

0

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

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

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

+0

非常感谢你的回答,但如果我喜欢你说我说我得到另一个错误:AttributeError:'用户'对象没有属性'_data' – mrvaita 2014-09-29 07:46:03