python - La vista de matraz muestra 400 errores en lugar de plantilla con formulario
flask wtforms (1)
Su vista acepta solicitudes
GET
y
POST
.
request.form
solo se completa en
POST
.
Si intenta acceder a una clave que no existe, genera un error 400.
No existirán claves cuando
GET
la página inicialmente.
El patrón común para esto es proteger el código que requiere
request.form
en un bloque
if request.method == ''POST''
.
Devuelva una redirección después de manejar la solicitud
POST
; de lo contrario, devuelva la plantilla representada.
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'')
Dado que parece estar usando Flask-WTF, puede usar el método
validate_on_submit
del formulario en lugar del
method
de verificación.
En ese caso, también puede acceder a los datos a través de la instancia del formulario y usar el formulario para representar las entradas por usted.
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>
Estoy tratando de mostrar una página con un formulario, luego agrego un
Player
a la base de datos cuando se envía el formulario.
Sin embargo, no puedo ver el formulario porque el navegador siempre muestra un error
400 Bad Request
.
Otras publicaciones indican que esto podría deberse a que el nombre de la entrada del formulario no coincide con la clave que obtengo de
request.form
, pero todas mis claves coinciden.
¿Por qué recibo este error?
<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)