¿Cuál es la causa del error de solicitud incorrecta al enviar el formulario en la solicitud del Frasco?

Después de leer muchos problemas de sonido similares y los documentos relevantes de Flask, parece que no puedo entender 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 envío un formulario HTML que se vincula 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

   apply   {% if accounttype=="business" %}  {% elif accounttype=="student" %}  {% endif %} 

Full Name:

Email Address:

...

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 verifiqué dos veces para asegurarme de que importé todo lo necesario, por ejemplo, from flask import request . También consulté la base de datos y confirmé que no se agregaron las adiciones del formulario.

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

La solución fue simple y destapada en los comentarios. Como se abordó en esta pregunta, Error de envío de formulario, Flask , y señalado por Sean Vieira ,

… el problema es que Flask genera un error de HTTP cuando no encuentra una clave en los diccionarios de args y formularios. Lo que Flask asume de forma predeterminada es que si está solicitando una clave en particular y no está allí, entonces se omite algo de la solicitud y la solicitud completa no es válida.

En otras palabras, si solo un elemento de formulario que usted solicita 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 el rastreo. Para mí, fue una falta de coherencia con la ortografía: en el HTML, etiqueté varias entradas de formulario

  

mientras que en Python, cuando se llamó a un POST, tomo una forma inexistente con

 request.form['question1'] 

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

 request.form['question1_field'] 

Espero que esto ayude.