tdi*_*gi5 2 python flask wtforms flask-wtforms
我正在尝试显示带有表单的页面,然后Player在提交表单时将一个添加到数据库。但是,我无法查看该表单,因为浏览器始终显示400 Bad Request错误。其他帖子表明这可能是因为表单输入的名称与我从中获取的键不匹配request.form,但是我所有的键均匹配。为什么会出现此错误?
<form method="post">
{{ form.hidden_tag() }}
<input name="name">
<input name="available">
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
@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)
Run Code Online (Sandbox Code Playgroud)
您的视图接受GET并POST请求。request.form仅在上填写POST。如果您尝试访问不存在的密钥,则会引发400错误。GET最初页面时没有键。
造成这种情况的常见模式是守护需要代码request.form在一个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')
Run Code Online (Sandbox Code Playgroud)
由于您似乎正在使用Flask-WTF,因此可以使用表单的validate_on_submit方法而不是使用check 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)
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |