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> (攻略)
見事に解決、リスト表示が出来る様になった。
ファイル同士の繋がりがまだ掴めていないが、エラーが出た際にはブラウザの吐き出すエラーの場所だけでは無く、サーバーが吐き出すデータも見ると良さそうだ。
コメント