비슷한 소리가 나는 문제와 관련 Flask 문서를 읽은 후 양식을 제출할 때 다음 오류가 발생하는 원인을 파악할 수없는 것 같습니다.
400 잘못된 요청
브라우저 (또는 프록시)가이 서버가 이해할 수없는 요청을 보냈습니다.
양식은 항상 제대로 표시되지만 다음 함수 중 하나에 연결된 HTML 양식을 제출하면 잘못된 요청이 발생합니다.
@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")
HTML의 관련 부분은
<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">
...
대부분의 사람들에게 문제가 호출되지 않았 GET
거나 POST
,하지만 두 기능에 그냥 뭐하는 거지, 내가 두 번 같은, 확실히 내가 가져 모든 필요하게 확인 from flask import request
. 또한 데이터베이스를 쿼리하여 양식의 추가 사항이 추가되지 않았 음을 확인했습니다.
Flask 앱에서 HTML 양식에서 약간 다른 레이블이 지정된 양식 필드를 요청했습니다. 이름을 일관되게 유지하는 것은 필수입니다. 이 질문 양식 전송 오류, Flask 에서 더 많은 내용을 읽을 수 있습니다.
답변
해결책은 간단했고 의견에서 밝혀졌습니다. 이 질문에서 언급했듯이 양식 전송 오류 Flask , Sean Vieira가 지적했습니다 .
… 문제는 Flask가 args에서 키를 찾지 못하고 사전을 형성하지 못할 때 HTTP 오류를 발생 시킨다는 것입니다. Flask가 기본적으로 가정하는 것은 특정 키를 요청하는 경우 해당 키가 없으면 요청에서 누락 된 부분이 있고 전체 요청이 유효하지 않다는 것입니다.
즉, Python에서 요청한 양식 요소 중 하나만 HTML에서 찾을 수없는 경우 POST 요청이 유효하지 않고 오류가 나타납니다. 제 경우에는 역 추적에 이상이 없습니다. 저에게는 철자와 일관성이 부족했습니다. HTML에서 다양한 양식 입력에 레이블을 지정했습니다.
<input name="question1_field" placeholder="question one">
Python에서 POST가 호출되었을 때 존재하지 않는 양식을 가져옵니다.
request.form['question1']
반면 내 HTML 양식 이름과 일치하려면
request.form['question1_field']
이게 도움이 되길 바란다.