[python] Flask 애플리케이션에서 양식을 제출할 때 잘못된 요청 오류의 원인은 무엇입니까?

비슷한 소리가 나는 문제와 관련 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']

이게 도움이 되길 바란다.


답변