2017-09-18 43 views
1

我試圖顯示一個窗體的頁面,然後添加Player到表單提交時,數據庫。但是,我無法查看該表單,因爲瀏覽器始終顯示400 Bad Request錯誤。其他帖子指出,這可能是因爲表單輸入的名稱與我從request.form得到的密鑰不匹配,但我的所有密鑰都匹配。爲什麼我會得到這個錯誤?燒瓶視圖顯示400錯誤,而不是模板與表格

<form method="post"> 
    {{ form.hidden_tag() }} 
    <input name="name"> 
    <input name="available"> 
    <input type="submit"> 
</form> 
@app.route('/addplayer', methods=['GET', 'POST']) 
def addplayer(): 
    connect('basketball_contracts', host='localhost', port=27017) 
    n = request.form['name'] 
    a = request.form['available'] 
    post= Post(
     name=n, 
     available=a 
    ) 
    post.tags = ['test'] 
    post.save() 
    return render_template('addplayer.html', form=form) 

回答

4

你的觀點接受GETPOST請求。 request.form只填寫在POST。如果您嘗試訪問不存在的密鑰,則會引發400錯誤。當您初始頁面時,不會存在任何按鍵。

這種常見模式是在if request.method == 'POST'塊中防止需要request.form的代碼。處理POST請求後返回重定向,否則返回呈現的模板。

from flask import url_for, redirect, render_template 

@app.route('/addplayer', methods=['GET', 'POST']) 
def addplayer(): 
    if request.method == 'POST': 
     Post(
      name=request.form['name'], 
      available=request.form['available'] 
     ).save() 
     return redirect(url_for('index')) 

    return render_template('addplayer.html') 

既然你似乎是使用瓶,跆拳道,你可以用它代替檢查method形式的validate_on_submit方法。在這種情況下,您還可以通過表單實例訪問數據,並使用表單爲您呈現輸入。

from flask import url_for, redirect, render_template 

@app.route('/addplayer', methods=['GET', 'POST']) 
def addplayer(): 
    form = AddPlayerForm() 

    if form.validate_on_submit(): 
     Post(
      name=form.name.data, 
      available=form.available.data 
     ).save() 
     return redirect(url_for('index')) 

    return render_template('addplayer.html', form=form) 
<form method=post> 
    {{ form.hidden_tag() }} 
    {{ form.name.label}} {{ form.name }}<br> 
    {{ form.available.label }} {{ form.available }}<br> 
    <input type=submit value="Add Player"> 
</form>