2015-06-20 66 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保護。 –