Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask视图显示400错误,而不是带有表单的模板_Python_Flask_Wtforms_Flask Wtforms - Fatal编程技术网

Python Flask视图显示400错误,而不是带有表单的模板

Python Flask视图显示400错误,而不是带有表单的模板,python,flask,wtforms,flask-wtforms,Python,Flask,Wtforms,Flask Wtforms,我试图显示带有表单的页面,然后在提交表单时向数据库添加一个Player。但是,我无法查看表单,因为浏览器总是显示400错误请求错误。其他帖子指出,这可能是因为表单输入的名称与我从request.form获得的键不匹配,但我的所有键都匹配。为什么会出现这个错误 {{form.hidden_tag()}} 您的视图接受GET和POST请求请求。表格仅在POST上填写。如果您试图访问一个不存在的密钥,则会引发400错误。最初获取页面时,将不存在任何键 常见的模式是在if request.metho

我试图显示带有表单的页面,然后在提交表单时向数据库添加一个
Player
。但是,我无法查看表单,因为浏览器总是显示
400错误请求
错误。其他帖子指出,这可能是因为表单输入的名称与我从
request.form
获得的键不匹配,但我的所有键都匹配。为什么会出现这个错误


{{form.hidden_tag()}}

您的视图接受
GET
POST
请求<代码>请求。表格仅在
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')

由于您似乎正在使用Flask WTF,因此可以使用表单的
validate\u on\u submit
方法,而不是选中
method
。在这种情况下,还可以通过表单实例访问数据,并使用表单为您呈现输入

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.hidden_tag()}}
{{form.name.label}{{form.name}}
{{form.available.label}{{form.available}}}
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)