【问题标题】:WTForms, how to attach JSON data to the requestWTForms,如何将 JSON 数据附加到请求中
【发布时间】:2015-06-20 15:38:51
【问题描述】:

我正在为 Flask 应用程序构建一个带有 WTForms 的表单。 此表单的 las 字段是与 google PlacesAPI 一起使用的地址字段,因此它会自动完成用户在该字段中介绍的地址。

我希望能够保存此 PlacesAPI 在用户选择地址时生成的所有数据,但我正在努力寻找将这些数据发送到服务器的正确方法。

我有一个以 MongoDB 作为后端的 Flask。

我的尝试

  1. AJAX

我使用 Jquery Ajax 方法提交了表单,我通过将 WTF-JSON 添加到我的项目来验证它,它对 Form 类和一些方法进行猴子补丁,以便它可以将 JSON 作为 ***kwargs 处理。

问题:这让我无法轻松地在表单验证中重定向用户。

  1. 添加隐藏输入字段

我可以添加一个隐藏的输入字段,在其中将所有地址 JSON 添加为字符串,然后在我的后端处理它

问题:不知何故,这有点 hacky,我想知道是否有更好的方法

问题

这样做的正确方法是什么?这是我第一次尝试,所以我很确定一定有一种我在这里想念的方法。非常感谢您的帮助。

【问题讨论】:

    标签: ajax flask wtforms flask-wtforms wtforms-json


    【解决方案1】:

    考虑到您所解释的场景,选项#1 是最佳选项。将用户重定向到表单验证页面应该没有任何问题,因为您可以通过 XHR 管理它。这是我可以提出的建议

    @catalog.route('/')
    @catalog.route('/your_page')
    def home():
        if request.is_xhr:
            ## Here you can call the def and store the addresses
            addresses = Address.query.all() 
            json_addresses jsonify({'addresses': addresses)})
            return render_template('your_form_page.html', json_addresses)    
    

    在呈现模板页面时,您会传递更多参数,例如验证消息。

    请根据您的功能需要使用is_xhr,但我推荐它。

    【讨论】:

    • 感谢 Pralhad,我已经这样做了,但遇到了 CSRF 验证问题。我已经解释了here 因为我不想用那个问题来污染这个问题。我应该在这里打开一个新线程还是解释我的问题?
    • 很高兴知道 - 你已经解决了。这真的取决于你 - 但我建议在这里解释这些事情,而不是一个新线程:)
    • 好吧,我的问题如下:我有一个需要地址字段的表单。我正在使用 Google Places API 来自动加载建议,我还需要将输入地点的 API 数据发送到数据库。我是用 ajax 做的,使用 is_xhr,你的建议是我倾向于如何处理这种情况。问题是我使用带有 ajax 发布请求的 jquery 发送所有信息,并处理使用 wtforms-json 包 (form=My orm.from_json(request.json) 的有效性。它工作完美,除了它没有t 当我用烧瓶 wtforms 开启 csrf 保护时。
    • 我已将 csrf 令牌正确添加到我的标题中,并且我继承自烧瓶 wtforms Form 对象,而不是 wtforms Form 对象。我唯一的想法是,当 wtforms-json 对类进行修补时,它可能会对类做一些事情。也许这会影响验证。
    猜你喜欢
    • 2021-06-04
    • 2012-05-02
    • 2022-01-05
    • 2016-08-15
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多