Flask,MongoEngine,Wtforms - 正确呈现密码字段和日期时间字段

时间:2014-04-04 16:05:28

标签: python flask mongoengine wtforms

所以我使用MongoEngine,Flask和WTForms来组合一个简单的webapp,我有一个如下所示的用户模型:

class User(db.document):
    username = db.StringField(max_length=64)
    password = db.StringField(max_length=64)
    date_joined = db.DateTimeField(default=datetime.datetime.now)

现在,当我使用MongoEngine的model_form()(来自于flask.ext.mongoengine.wtf)来创建表单然后在模板中呈现它时,密码属性上的DateTimeField和StringField()似乎都呈现为简单的文本输入字段。

如何让它们作为日历小部件呈现(如Django所做)和密码字段,实际上隐藏密码而无需自定义编写我自己的表单?

2 个答案:

答案 0 :(得分:1)

这有点旧,但在寻找这个问题时谷歌也很高兴。

我已经挖到了烧瓶-MongoEngine lib(特别是here),并找到了一种方法。可以通过" field_args"一个字典,可以帮助修改从模型中生成字段的方式。

我遇到了完全相同的问题,但使用像这样的model_form有效:

form_cls = model_form(User, only=['username', 'password'], field_args={'password': {'password':True}})

如果您深入了解该链接中的文件,还有一些其他字段也可以更改。

答案 1 :(得分:0)

我有同样的问题,我发现解决这个问题的唯一方法是使用wtforms:

from flask.ext.mongoengine.wtf import model_form
from wtforms import PasswordField

class User(db.document):
    username = db.StringField(max_length=64)
    password = db.StringField(max_length=64)
    date_joined = db.DateTimeField(default=datetime.datetime.now)

user = model_form(User)
user.password = PasswordField('Password')

您可能还想在密码字段中添加 DataRequired 验证程序。