簡體   English   中英

Flask的POST請求中出現400錯誤的請求錯誤

[英]400 Bad Request Error on POST request with Flask

我正在嘗試使用Flask從具有POST請求的HTML表單返回數據。 由於某種原因,我收到400錯誤的請求錯誤。 查看Chrome Dev Tools,我可以看到帶有輸入標簽的所有表單字段都是發布請求的一部分。 帶有dropwdown列表的select標簽沒有被捕獲,我認為這是造成錯誤的原因。 有人知道為什么在發布請求中未捕獲選擇標簽嗎? 任何幫助,不勝感激。

這是HTML表單:

        <label for="vendor">Select Vendor</label>
        <div class="flextable p-b" style="padd">
          <div class="flextable-item">     
            <select class="selectpicker" data-live-search="true" form="addInvoice" name="vendor" id="vendor">
              <option>Jack Jaffa & Associates</option>
              <option>Jacobs/Doland/Beer LLC</option>
              <option>Jenkins & Huntington Inc.</option>
              <option>Joseph J. Blake & Associates, Inc.</option>
              <option>Langan (Geotechnical)</option>
              <option>Madison Realty Capital</option>
              <option>McNamara Salvia, Inc</option>
              <option>Metropolis Group, Inc</option>
              <option>National Grid</option>
            </select>
          </div>
          <div class="flextable-item">
              <button type="button" class="btn btn-xs btn-primary-outline">Add vendor</button>
          </div>


        <label for="invoice_number">Invoice Number:</label>
         <input type="text" class="form-control p-b" placeholder="Every vendor invoice # must be unique" name="invoice_number" id="invoice_number">

         <label for="invoice_amount">Amount:</label>
         <input type="text" class="form-control p-b" placeholder="$0.00" name="invoice_amount" id="invoice_amount">

         <label for="invoice_amount">Description:</label>
         <input type="text" class="form-control p-b" placeholder="$0.00" width="100%" name="description" id="description">

      <div class="spacer"></div>



      <div class="flextable">
        <div class="flextable-item">
          <label for="date_received">Date received:</label>
         </div>
        <div>
          <div class="flextable-item">
          <div class="input-group">
            <span class="input-group-addon">
              <span class="icon icon-calendar"></span>
            </span>
            <input type="text" value="01/01/2015" class="form-control" data-provide="datepicker" style="width: 200px;" name="date_received" id="date_received">
          </div>
            </div>
              </div>
                </div>
        </div>


        <div class="modal-actions p-t-lg">
          <button type="button" class="btn-link modal-action" data-dismiss="modal">Cancel</button>
          <button type="submit" class="btn-link modal-action" id="submit" >
            <strong>Save + Continue</strong>
          </button>
        </div>
    </form>

這是Flask python路由:

@app.route('/add_invoice', methods=['GET', 'POST'])
def add_invoice():
""" Method for capturing form data to add invoice items to database"""

if request.method == 'POST':
    find_cost_code = 7777  # eventually need code to lookup cost-code from POST request
    print request.form['invoice_number']
    print request.form['invoice_amount']
    print request.form['description']
    print request.form['vendor']
    print request.form['date_received']


return "This is a test"

添加的信息:因此,如果我刪除此行,錯誤的請求錯誤將消失:

print request.form['vendor']

這是因為“供應商”字段是html表單中唯一使用select標記進行輸入的字段,並且該數據未在發布請求字典中收集(我可以在Chrome開發工具中看到)。 POST請求缺少與選擇標簽關聯的字段。 不確定如何在表單數據中捕獲選擇標簽...

在處理燒瓶形式時,我已經多次遇到此問題,我認為解決方案是啟用csrf令牌保護:根據此,您需要初始化並為您的應用啟用它! 大多數時間錯誤400是由於缺少CSRF令牌。 你可以這樣做:

from flask_wtf.csrf import CSRFProtect

csrf = CSRFProtect(app)

進行初始化,並在您的表格中添加:

<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>

希望對你有幫助!! 隨時進行編輯。

form =“ addInvoice”

該屬性是我的HTML表單標記的一部分,是導致錯誤的原因。 我不確定為什么,但是刪除它時,錯誤消失了。

(感謝您在上面的幫助下嘗試對此進行調查。)

您需要獲取列表來捕獲select

暫無
暫無

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

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