python flask wtforms flask-wtforms

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)