【问题标题】:Using WTForms' populate_obj( ) method with Flask micro framework在 Flask 微框架中使用 WTForms 的 populate_obj() 方法
【发布时间】:2011-09-05 23:59:40
【问题描述】:

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

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

我还有一个视图功能,用于处理用户进行的此类编辑。我目前使用的数据库是MongoDBMongoKit 模块。到目前为止,我只能在视图功能中做到这一点,但没有运气。

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

【问题讨论】:

  • 您需要描述您遇到了什么错误,或者您获得的结果与您的预期有何不同。
  • 我希望有人能指出我应该在我写的地方保留什么应该放在这里什么?。还有关于通过这种方式获得的用户对象是否允许通过。

标签: python flask wtforms mongokit


【解决方案1】:

你在使用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,我不确定您的问题是什么。如果您不使用 Flask-WTF,请使用 Flask-WTF。"我不能更同意最后一句话。如果你不使用 Flask-WTF,请使用 Flask-WTF。
  • 很难看出该示例中发生了什么,因为您正在执行自定义 SQLA 内容,而不仅仅是普通的 db.session.commit() :)
【解决方案2】:

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

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

【讨论】:

  • 仅限原生 WTFormsFlask-WTF 不需要额外的 request.form
  • @Sean - True ... 这就是为什么Flask-WTF 是一个很好的扩展的部分原因;它有助于减少样板文件。但是 OP 没有使用Flask-WTF,所以简单地推荐他使用它有点类似于建议使用 jQuery 来解决 JavaScript 问题。这将意味着您的问题已为您解决 - 但问题已解决您...... 仍然不知道如何解决它。这就是为什么我只给了 OP 以简单的方式使用 Flask 和 WTForms 来做他需要做的事情的原因(你已经很好地指出了Flask-WTF 的优点,我为此给了你一个 +1 ;-) )。
  • 点头 对谷歌 cookie 的更正比其他任何东西都多。也就是说,如果用户在开发过程中遇到问题(相对于维护),那么建议现在比以后更轻松的事情会更容易。 :~]
【解决方案3】:

如果是 Flask-WTF,你可以这样写

form = UserForm(obj=user)

那就行了!

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多