Flask, MongoEngine, Wtforms - 正确渲染密码字段和日期时间字段
我正在使用MongoEngine、Flask和WTForms来搭建一个简单的网页应用,我有一个用户模型,长这样:
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)来创建一个表单,并在模板中渲染它时,日期时间字段和密码字段都显示为普通的文本输入框。
我该如何让它们显示为一个日历小工具(像Django那样)和一个真正能隐藏密码的输入框,而不需要自己手动写表单呢?
2 个回答
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 的验证器。
1
这个内容有点旧,但在谷歌上搜索这个问题时,它的排名还挺高。
我研究了一下flask-MongoEngine这个库(具体可以在这里找到),发现了一种解决方法。这里有一个选项,可以传入一个叫“field_args”的字典,这个字典可以帮助你修改从模型生成字段的方式。
我之前也遇到过同样的问题,但用这种方式使用model_form就可以解决了:
form_cls = model_form(User, only=['username', 'password'], field_args={'password': {'password':True}})
如果你查看那个链接里的文件,还可以发现其他一些字段也可以进行修改。