[解決済み] Flaskアプリケーションでフォーム送信時にBad Request Errorが発生する原因は何ですか?
質問
多くの似たような問題や関連するFlaskドキュメントを読みましたが、フォームを送信する際に以下のエラーを発生させている原因を突き止めることができません。
400 Bad Request (不正なリクエスト)
ブラウザ(またはプロキシ)が送ったリクエストは、このサーバーが理解できないものでした。
フォームは常に正しく表示されますが、これらの機能のいずれかに関連する 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="[email protected]">
...
多くの人にとっての問題は
GET
または
POST
など、必要なものをすべてインポートしていることを再確認しました。
from flask import request
. また、データベースを照会して、フォームから追加されたものが追加されていないことを確認しました。
Flaskアプリでは、HTMLフォームで微妙にラベルが違うフォームフィールドをリクエストしていました。名前を統一しておくことは必須です。詳しくはこちらの質問で読むことができます フォーム送信エラー、Flask
どのように解決するのですか?
解決方法は簡単で、コメントで発覚しました。この質問で取り上げられたように。 フォーム送信エラー、Flask によって指摘され ショーン・ヴィエイラ ,
<ブロッククオート...問題は、Flaskがargsとformの辞書にあるキーを見つけられなかったときにHTTPエラーを発生させることです。 を見つけることができなかった場合、Flask は HTTP エラーを発生させるということです。Flaskがデフォルトで想定しているのは は、特定のキーを要求しているのに、それがない場合、何かリクエストから漏れているのだと仮定します。 リクエストから何か漏れていて、そのリクエスト全体が無効である。 は無効です。
つまり、Pythonでリクエストしたフォーム要素が1つだけHTMLで見つからない場合、POSTリクエストは有効ではなく、私の場合はトレースバックに何の不都合もなく、エラーが表示されるのです。私の場合は、スペルとの整合性の欠如でした。HTMLでは、様々なフォーム入力にラベルを付けました
<input name="question1_field" placeholder="question one">
で、PythonではPOSTが呼ばれたときに、存在しないフォームを掴みます。
request.form['question1']
一方、HTML のフォーム名と一致させるためには、次のようにする必要がありました。
request.form['question1_field']
これが役に立てばいいのですが。
関連
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] バブルソートの宿題
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?