Flaskでブログアプリを作成中、ブログ一覧機能を作っていた時の事。
ブログ作成ボタンを押したら下記エラー(下から6行を引用)をブラウザが吐き出してそこから進まない。
File "/********/application/flask_blog/views/entries.py", line 29, in add_entry
text=request.form['text']
File "/********/.local/share/virtualenvs/application-wHqIKfO_/lib/python3.8/site-packages/werkzeug/datastructures.py", line 442, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'text'
まずは一番下から”~400 Bad Request: The browser (or proxy) sent a request that this server could not understand.”をグーグルで調べる。
見つけたサイトによると
Bad Request. Your browser sent a request that this server could not understand
が濃厚。
postコマンドの内容が悪いらしい。
でも何なのか良く分からない。
この上の”~werkzeug/datastructures.py”, line 442, in getitem”の部分は恐らく自分でなんとか出来る場所では無さそう。
で、その次”~flask_blog/views/entries.py”, line 29, in add_entry
text=request.form[‘text’]”の辺りでなんか悪いのかも知れないので、views/entries.pyの29行目近辺を見てみる。
def add_entry():
if not session.get('logged_in'):
return redirect(url_for('login'))
entry = Entry(
title=request.form['title'],
text=request.form['text']
)
db.session.add(entry)
db.session.commit()
flash('新しく記事が作成されました')
return redirect(url_for('show_entries'))
何度見てもおかしな所は無い。
一度該当箇所を消して書き直してもブラウザは同じエラーを吐き出す。
ここは違うのかも知れない。
ふとサーバー自体の動きが気になった。
ブログ作成ボタンを押した時のサーバーサイドの反応を確認。
127.0.0.1 - - [11/Apr/2021 16:38:12] "GET /entries/new HTTP/1.1" 200 - 127.0.0.1 - - [11/Apr/2021 17:16:49] "POST /entries HTTP/1.1" 500 - Traceback (most recent call last): →以下エラーメッセージ
エラーの前にある”127.0.0.1 – – [11/Apr/2021 16:38:12] “GET /entries/new HTTP/1.1” 200 -“が気になって、entries/new.htmlをチェック。
(前略)
<div class="form-group">
<label for="InputText">本文</label>
<textarea class="form-control" id="InputText" name=textrows="3"></textarea>
(攻略)
‘name=textrows=”3″‘のtextとrowsの間にスペースが無かった!
正しくは下記。これはコードを書いている途中に気付いておきたかった。反省。
(前略)
<div class="form-group">
<label for="InputText">本文</label>
<textarea class="form-control" id="InputText" name=text rows="3"></textarea>
(攻略)
見事に解決、リスト表示が出来る様になった。
ファイル同士の繋がりがまだ掴めていないが、エラーが出た際にはブラウザの吐き出すエラーの場所だけでは無く、サーバーが吐き出すデータも見ると良さそうだ。


コメント