understand the that sent not form could python forms post flask bad-request

python - the - request.form flask



¿Cuál es la causa del error de solicitud incorrecta al enviar el formulario en la aplicación Flask? (1)

La solución fue simple y descubierta en los comentarios. Como se aborda en esta pregunta, el error de envío de formulario, Flask , y señalado por Sean Vieira ,

... el problema es que Flask genera un error HTTP cuando no puede encontrar una clave en los args y forma diccionarios. Lo que Flask asume de manera predeterminada es que si está solicitando una clave en particular y no está allí, entonces algo quedó fuera de la solicitud y la solicitud completa no es válida.

En otras palabras, si solo un elemento de formulario que solicite en Python no se puede encontrar en HTML, entonces la solicitud POST no es válida y aparece el error, en mi caso sin irregularidades en la trazabilidad. Para mí, fue una falta de coherencia con la ortografía: en el HTML, etiqueté varias entradas de formularios

<input name="question1_field" placeholder="question one">

mientras que en Python, cuando se llamaba un POST, cogí una forma inexistente con

request.form[''question1'']

mientras que, para ser consistente con los nombres de mi formulario HTML, tenía que ser

request.form[''question1_field'']

Espero que esto ayude.

Después de leer muchos problemas de sonido similares y los documentos de Flask relevantes, parece que no puedo averiguar qué está generando el siguiente error al enviar un formulario:

400 Petición Incorrecta

El navegador (o proxy) envió una solicitud que este servidor no pudo entender.

Si bien el formulario siempre se muestra correctamente, la solicitud incorrecta se produce cuando presento un formulario HTML vinculado a cualquiera de estas funciones:

@app.route(''/app/business'', methods=[''GET'', ''POST'']) def apply_business(): if request.method == ''POST'': new_account = Business(name=request.form[''name_field''], email=request.form[''email_field''], account_type="business", q1=request.form[''q1_field''], q2=request.form[''q2_field''], q3=request.form[''q3_field''], q4=request.form[''q4_field''], q5=request.form[''q5_field''], q6=request.form[''q6_field''], q7=request.form[''q7_field''], account_status="pending", time=datetime.datetime.utcnow()) db.session.add(new_account) db.session.commit() session[''name''] = request.form[''name_field''] return redirect(url_for(''success'')) return render_template(''application.html'', accounttype="business") @app.route(''/app/student'', methods=[''GET'', ''POST'']) def apply_student(): if request.method == ''POST'': new_account = Student(name=request.form[''name_field''], email=request.form[''email_field''], account_type="student", q1=request.form[''q1_field''], q2=request.form[''q2_field''], q3=request.form[''q3_field''], q4=request.form[''q4_field''], q5=request.form[''q5_field''], q6=request.form[''q6_field''], q7=request.form[''q7_field''], q8=request.form[''q8_field''], q9=request.form[''q9_field''], q10=request.form[''q10_field''], account_status="pending", time=datetime.datetime.utcnow()) db.session.add(new_account) db.session.commit() session[''name''] = request.form[''name_field''] return redirect(url_for(''success'')) return render_template(''application.html'', accounttype="student")

La parte relevante de HTML es

<html> <head> <title>apply</title> </head> <body> {% if accounttype=="business" %} <form action="{{ url_for(''apply_business'') }}" method=post class="application_form"> {% elif accounttype=="student" %} <form action="{{ url_for(''apply_student'') }}" method=post class="application_form"> {% endif %} <p>Full Name:</p> <input name="name_field" placeholder="First and Last"> <p>Email Address:</p> <input name="email_field" placeholder="[email protected]"> ...

El problema para la mayoría de las personas no era llamar a GET o POST , pero estoy haciendo exactamente eso en ambas funciones, y lo comprobé dos veces para asegurarme de haber importado todo lo necesario, como la from flask import request . También consulté la base de datos y confirmé que las adiciones del formulario no se agregaron.

En la aplicación Flask, estaba solicitando campos de formulario que fueron etiquetados ligeramente diferente en el formulario HTML. Mantener los nombres consistentes es una necesidad. Se puede leer más en esta pregunta Error al enviar el formulario, Frasco