2015-06-20 97 views
1

我使用WTForms为Flask应用程序构建表单。 此表单的las字段是一个地址字段,可与google PlacesAPI一起使用,因此可自动完成用户在该字段中引入的地址。WTForms,如何将JSON数据附加到请求中

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

我有一个瓶子MongoDB作为后端。

我已经试过

  1. AJAX

我submited形式使用jQuery的Ajax方法,我加入WTF-JSON到我的项目验证它,它monkeypatches Form类和一些方法,所以它可以处理JSON作为*** kwargs。

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

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

    处理它

    问题:不知怎的,这SIMES哈克,我不知道是否有更好的方法

    问题

    什么是正确的方法来做到这一点?这是我第一次尝试,所以我非常确定我必须有一种方法在这里失踪。非常感谢您的帮助。

    回答

    0

    考虑到您已解释的情况,选项#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,但我建议。

    +0

    感谢Pralhad,我已经这样做了,并且遇到了CSRF验证问题。我已经在[这里]解释了它(http://www.reddit.com/r/flask/comments/3afaiv/af_flaskwtf_send_json_data_and_csrf_validation/),因为我不想用这个问题来监督这个问题。我应该在这里打开一个新线索或解释我的探针吗? –

    +0

    很高兴知道 - 你已经解决了它。它真的取决于你 - 但我会建议解释这里的东西,而不是一个新的线程:) –

    +0

    嗯,我的问题如下:我有一个表单,需要一个地址字段。我使用Google位置API来自动载入建议,并且我需要将输入位置的API数据也发送到数据库。我用ajax做了这个,使用is_xhr,你的建议是我倾向于处理这种情况。事情是我发送所有信息使用jQuery与ajax发布请求,并处理使用wtforms-json包(form = My orm)的有效性。from_json(request.json)。它完美地工作,除了它不会当我用烧瓶wtforms打开csrf保护。 –

    相关问题