質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1695閲覧

Flask:HTMLからPython側への値の受け渡しについて

mmzznno1

総合スコア1

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/11/14 10:39

前提

Flaskで機械学習を目的としたアプリを作成中です。
HTMLから取得したデータを取り込みたいのですが、うまくできません。

■現象Ⅰ
pati_id = str(request.form.get("pati_id"))

で実行すると下記のエラーメッセージが出力されます。

■現象Ⅱ

pati_id = str(request.form.get("pati_id"))
で実行すると
None で返答されてきます。

一般的にはrequest.form.getを使用してHTMLからの値を取得するようです。
HTML側の単純なミスかもしれませんが、解決できません。

バクを取るためのヒントでも教えていただければ幸いです。
よろしくお願いいたします。

試したこと

POSTが発行された時にif文で該当コードで真が偽か判定してみました。

発生している問題・エラーメッセージ

現象Ⅰ

BadRequestKeyError

1werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand. 2KeyError: 'pati_id' 3

現象Ⅱ

* Debugger is active! * Debugger PIN: 348-922-250 127.0.0.1 - - [14/Nov/2022 19:07:30] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 - 127.0.0.1 - - [14/Nov/2022 19:07:31] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 - 127.0.0.1 - - [14/Nov/2022 19:07:35] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [14/Nov/2022 19:07:36] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 - pati_id1 None 127.0.0.1 - - [14/Nov/2022 19:07:45] "POST /next HTTP/1.1" 302 - 127.0.0.1 - - [14/Nov/2022 19:07:45] "GET /next HTTP/1.1" 200 - 127.0.0.1 - - [14/Nov/2022 19:07:45] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 - 127.0.0.1 - - [14/Nov/2022 19:07:50] "GET /sub HTTP/1.1" 200 - 127.0.0.1 - - [14/Nov/2022 19:07:50] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 -

該当のソースコード

python3.9

1#「/next」へアクセスがあった場合に、next.htmlを返す 2@app.route("/next", methods=['GET','POST']) 3 4def next(): 5 6 if request.method == "POST": 7 8 #if request.form.get("pati_id"): 9 #return "success" 10 # else: 11 #return "error" 12 #else: 13 14 pati_id = str(request.form.get("pati_id")) 15 16 print("pati_id1") 17 print(pati_id) 18 19 20 return redirect(url_for("next")) 21 22 return render_template('next.html', 23 title = "Gait Prodict", 24 message = "退院前の歩行予測をするアプリです 続き" , 25 ) 26# return render_template('next.html', pati_id = pati_id , sex = sex , count =count) 27 28 29```HTML index.html 30 31{% extends 'base.html' %} 32 33{% block title %} 34{{ title }} 35{% endblock %} 36 37{% block headlinde %} 38{% endblock %} 39 40{% block content %} 41<P>{{ message }}</p> 42<form action = "/next" method="POST"> 43 <table> 44 <tr> 45 <th>患者IDを入力ください</th> 46 </tr> 47 <td>ID</td> 48 <td> 49 <input type="text" id="pati_id" name="pati_id" required 50 minlength="1" maxlength="4" size="10"> 51 </td> 52 </tr> 53 <tr> 54 <th>性別を入力を選んでください</th> 55 </tr> 56 <tr> 57 <th>SEX</th> 58 <td> 59 <input type = "radio" name = "sex" value = 0> 男性 60 <input type = "radio" name = "sex" value = 1 >女性 61 </td> 62 </tr> 63 <tr> 64 <th>検査回数を選んでください</th> 65 </tr> 66 <tr> 67 <th>回数</th> 68 <td> 69 <input type = "radio" name = "count" value = '1' >1回目 70 <input type = "radio" name = "count" value = '2' >2回目 71 <input type = "radio" name = "count" value = '3' >3回目 72 <input type = "radio" name = "count" value = '4' >4回目 73 <input type = "radio" name = "count" value = '5' >5回目 74 </td> 75 </tr> 76 <tr> 77 <th>血液データを入力してください</th> 78 </tr> 79 <th>ALB</th> 80 <td> 81 <input type = "number" name = "ALB" > 82 </td> 83 </tr> 84 <tr> 85```続きありHTML 86 87### 補足情報(FW/ツールのバージョンなど) 88$ flask routes 89Endpoint Methods Rule 90-------- --------- ----------------------- 91back GET, POST /back 92index GET, POST / 93next GET, POST /next 94static GET /static/<path:filename> 95sub GET, POST /sub 96(env) 97 98python3.9.13 99flask2.1.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rykss

2022/11/14 11:01

pati_idが無いらしいので、使用ブラウザの開発者ツールのネットワーク機能などでpostの中身を確認してみるのもいいかもしれません post・getのタイミングも中身も確認できるので便利ですよ
mmzznno

2022/11/14 12:00

ありがとうございます。単純なミスだとわかっているのですが、ヒントをいただき助かります。
guest

回答1

0

ベストアンサー

質問にあるコードを実行したところ、質問文にある現象は再現しませんでした。

■現象Ⅰ
pati_id = str(request.form.get("pati_id"))
で実行すると下記のエラーメッセージが出力されます。
■現象Ⅱ
pati_id = str(request.form.get("pati_id"))
で実行すると
None で返答されてきます。

と書いていらっしゃいますが、

質問文にあるコードは以下だったりします。

python

1 pati_id = str(request.form.get("pati_id")) 2 3 print("pati_id1") 4 print(pati_id)

取得しているのはpati_idで、printに記載されているのはpti_id1で、表示使用としている変数はpati_idです。
質問ですらこうなので、なにか勘違いしていたりしませんか。慌てていませんか。
一端pythonの実行を終了して再度実行したら治ったりしませんか。
別のファイルを編集していたりしませんか。

凄くもったいないことを間違っている気がするので落ち着いて確認するのをお勧めします。

なお、質問文とは関係ありませんが
pati_id = request.form.get("pati_id")として取得使用とした場合、取得できない場合にpati_idにはNoneが入ります。

request.form.getは第2引数に初期値を指定可能です。
現状のコードはrequest.form.get("pati_id", None)と同じです。
request.form.get("pati_id", "初期値にしたい文字列")等とすると便利な場合があります。

投稿2022/11/14 12:10

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmzznno1

2022/11/15 07:22

すごいありがたいコメントです。printで文で「pati_id1」としているのはsub.ihtmlに「pati_id2」をprint文で入れ、画面推移する度に値の変化があるのか確認するためです。質問するものも2回目で要領を得てなくすいません。 pythonは経験があるのですが、Flaskと連動させ、HTMLから値を取得する作業は初めてです。request.form.getの第2引数に数値を入れ、print文に表示されれば、HTML側の問題と推察されます。うまく、できるかわかりませんが、作業後に結果報告させていただきます。
mmzznno1

2022/11/23 10:46

続きHMTL… の記載をしていましたが、そのHTMLにバグがありました。form文を二回記載しており、postを2回発行していたためでした。返信が遅れ申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問