2017-09-18 9 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.formPOST에만 기입하십시오. 존재하지 않는 키에 액세스하려고하면 400 오류가 발생합니다. 처음에는 페이지가 GET 일 때 키가 존재하지 않습니다.

일반적인 패턴은 블록에 if request.method == 'POST' 블록이 필요한 가드 코드입니다. 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') 

이 플라스크-WTF를 사용하는 대신 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>