簡體   English   中英

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

[英]Using WTForms' populate_obj( ) method with Flask micro framework

我有一個模板,允許用戶編輯他們的用戶信息。

<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>

我還有一個視圖 function 用於處理用戶的此類編輯。 我目前使用的數據庫是帶有MongoKit模塊的MongoDB 到目前為止,我只能在 function 視圖中做到這一點,但沒有運氣。

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()工作?

UserForm應該將request.form傳遞給它,以使用 POST 請求中可用的值(如果有)填充它。

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

你在使用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

如果是 Flask-WTF,你可以這樣寫

form = UserForm(obj=user)

Thant會工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM