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 ocurre cuando envío un formulario HTML que se vincula con 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="your@email.com">
...
El problema para la mayoría de la gente no era llamar GET
o POST
, pero estoy haciendo exactamente eso en ambas funciones, y verifiqué dos veces para asegurarme de haber importado todo lo necesario, como 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 estaban etiquetados de forma ligeramente diferente en el formulario HTML. Mantener los nombres consistentes es imprescindible. Se puede leer más en esta pregunta Error de envío de formulario, frasco