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

2 投票
2 回答
1676 浏览
提问于 2025-04-18 01:22

我正在使用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}})

如果你查看那个链接里的文件,还可以发现其他一些字段也可以进行修改。

撰写回答