使用Flask微框架的WTForms的populate_obj()方法

2024-05-23 14:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模板,允许用户编辑他们的用户信息。

<form method="post">
    <table>
        <tr>
            <td>Username:</td>
            <td>{{user['username']}}</td>
        </tr>
        <tr>
            <td>New Password:</td>
            <td> <input type="password" name="password"></td>
            <td>{% if form.password.errors %} {{form.password.errors}} {% endif %}<td>
        </tr>
        <tr>
            <td>Re-enter Password:</td>
            <td> <input type="password" name="confirm_password">
            </td>
        </tr>
        <input type='hidden' name='username' value="{{user['username']}}">
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
</form>

我还有一个视图函数,用于处理用户的此类编辑。我当前使用的数据库是带有MongoKit模块的MongoDB。到目前为止,我只能在view函数中完成这个任务,但没有运气。

def edit():
    username = request.args.get('user')
    user = User.find_one({'username':username}) # Is this a correct way of doing it?
    form = UserForm(**what should be placed here?**, obj=user)

    if request.method == 'POST' and form.validate():
        form.populate_obj(user)
        user.save()
        return 'updated'
    return render_template('edituser.html', form=form, user=user)

为此,我将通过populate_obj(obj)。在这件事上我找不到什么帮助。我该怎么做才能让populate_obj()工作?


Tags: 用户nameformobj编辑inputtypetable
3条回答

你在用Flask-WTF?如果是,请检查以下示例代码:

https://github.com/sean-/flask-skeleton/blob/master/skeleton/modules/aaa/views.py#L13

具体而言,您将:

def edit():
    form = UserForm()
    if form.validate_on_submit():
        # Commit your form data

总之,如果您使用的是Flask-WTF,我不确定您的问题是什么。如果不使用Flask-WTF,请使用Flask-WTF

如果是烧瓶,你可以这样写

form = UserForm(obj=user)

他会成功的!

UserForm应该将request.form传递给它,以便用POST请求中可用的值(如果有的话)填充它。

form = UserForm(request.form, obj=user)

相关问题 更多 >