🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

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

Q&A

解決済

1回答

596閲覧

formタグの値をrequestで取得することができません

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

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

0グッド

0クリップ

投稿2019/12/13 07:53

前提・実現したいこと

簡易的な検索フォームを作りたくて、HTML側で<select> ~ <option>タグを使用し選択肢を作り、選択した項目をrequest.form.getを使い取得し、その取得した値をexecuteを使いデータベースを参照してその結果を表示する仕組みを作りたいのですが、そもそものHTML側で選択、入力した値をPython側で取得することができません。

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

該当のソースコード

Python, html

HTML <form action="/kensaku" , method="POST"> <ul> <li>毛色 <select name="color"> <option value="">--- 選択 ---</option> <option name="brown" value="茶">茶</option> <option name="white" value="白">白</option> <option name="black" value="黒">黒</option> </select> </li> <li>とし <select name="age"> <option value="">--- 選択 ---</option> <option name="kid" value="仔猫">仔猫</option> <option name="adult" value="成猫">成猫</option> <option name="old" value="老猫">老猫</option> </select> </li> <li>サクラ <select name="ear"> <option value="">------- 選択 -------</option> <option name="cut" value="サクラ">サクラ</option> <option name="nocut" value="サクラじゃない">サクラじゃない</option> </select> </li> <li> <a href="/kensaku">検索</a> </li> </ul> </form> -------------------------------------------------------- Python @app.route("/search", methods=["POST"]) def search(): color = request.form.get("color") age = request.form.get("age") ear = request.form.get("ear") print(color) conn = sqlite3.connect('cat.db') c = conn.cursor() c.execute("select color, age, ear from cat where color = ? and age = ? and ear = ? order by id DESC limit 10" (color, age, ear)) conn.commit() conn.close() return redirect("/kensaku")

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

azuapricot

2019/12/13 08:00

requestの中身はみてみました? requestの中身が空なんですか?
退会済みユーザー

退会済みユーザー

2019/12/13 08:04

はい。printで確認しましたが何も出力されなかったので、formとrequestが機能していない気がするんですが何処が間違っているのか分からなくて...。質問下手ですいません...。
azuapricot

2019/12/13 08:08

action="/search" じゃなくて action="/kensaku" なんですか? @app.route("/search", methods=["POST"]) って書いてありますが・・・(??)
退会済みユーザー

退会済みユーザー

2019/12/13 08:29 編集

検索フォームのページを"/search"、検索結果を表示するページを"/kensaku"と設定していて、action内には実行後に移行するページのURLを記入すると教わったので、"/kensaku"と記入しましたが違うんでしょうか...?
退会済みユーザー

退会済みユーザー

2019/12/13 08:31

参考記事、ありがとうございます。 もう一度自分で色々試してみようと思います。
azuapricot

2019/12/13 08:33

/searchで /kensakuにリダイレクトしてるじゃないですか・・・?
azuapricot

2019/12/13 08:34

action="呼びたいパス(今回なら/search)" python で該当パスが設定されている関数が呼ばれる ↓ 今回は処理後に /kensakuへリダイレクト=/kensaku画面が再表示される
退会済みユーザー

退会済みユーザー

2019/12/13 08:45 編集

redirectを指定してしまったせいで、"/search"で入力した内容が反映されることなく"/kensaku"が表示されてしまうという解釈で合っていますか?
azuapricot

2019/12/13 08:46

うーんと・・・? 現時点で、この @app.route("/search", methods=["POST"]) def search(): この関数内には入ってきてるんでしょうか?
退会済みユーザー

退会済みユーザー

2019/12/13 08:49

入ってきていないです...。 HTML側に"form"タグを設定して、Python側で"request.form.get"で値を取得できると考えていたのですが反映されませんでした...。
azuapricot

2019/12/13 08:52

入ってきてないですよね?安心しました() 入ってこない理由は、<form action="/kensaku"> なっているから、といえば伝わりますでしょうか。 def search()を呼ぶためには、あなたが『ルーティング』したパスを actionに設定してあげる必要があります。 @app.route("/search", ) ← これ <form>タグの action を /search に書き換えたらどうなりますか?
退会済みユーザー

退会済みユーザー

2019/12/13 09:01

"/search"に書き換えてみましたが反応しませんでした...。 "print(color)"から何の反応もない時点で"request"が機能していないという事ですよね?
azuapricot

2019/12/13 09:04

print(color) じゃなくて、 print("てすと") のようにそこの関数を通っているか確認できますか?
azuapricot

2019/12/13 09:09

あと考えられるのはここですかね <a href="/kensaku">検索</a> もしこれでsubmitしたと思っているなら間違ってます・・・(ただ /kensakuへアクセスしてるだけ) <button type="submit">検索</button> に変えてみる、とかでしょうか
退会済みユーザー

退会済みユーザー

2019/12/13 09:10

"print("test")"と入力して実行してみましたが、何も反映されませんでした! これはそもそもPython側のコーディングの仕方が間違っているという事ですか?
azuapricot

2019/12/13 09:11

追記しましたが、検索ボタンがよろしくないと思います。 (そもそもPOST送信できてない)
退会済みユーザー

退会済みユーザー

2019/12/13 09:19

検索ボタンを修正したら行けるようになりました!! "form"と"request"に気を取られてしまって全く考えにありませんでした???? 親切に回答していただきましてありがとうございました!!
guest

回答1

0

ベストアンサー

これでPythonの関数にとびませんか?

HTML

1<form action="/search" , method="POST"> 2 <ul> 3 <li>毛色 4 <select name="color"> 5 <option value="">--- 選択 ---</option> 6 <option name="brown" value="茶">茶</option> 7 <option name="white" value="白">白</option> 8 <option name="black" value="黒">黒</option> 9 </select> 10 </li> 11 <li>とし 12 <select name="age"> 13 <option value="">--- 選択 ---</option> 14 <option name="kid" value="仔猫">仔猫</option> 15 <option name="adult" value="成猫">成猫</option> 16 <option name="old" value="老猫">老猫</option> 17 </select> 18 </li> 19 <li>サクラ 20 <select name="ear"> 21 <option value="">------- 選択 -------</option> 22 <option name="cut" value="サクラ">サクラ</option> 23 <option name="nocut" value="サクラじゃない">サクラじゃない</option> 24 </select> 25 </li> 26 <li> 27 <button type="submit">検索</button> 28 </li> 29 </ul> 30</form>

投稿2019/12/13 09:12

編集2019/12/13 09:14
azuapricot

総合スコア2341

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

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

退会済みユーザー

退会済みユーザー

2019/12/13 09:20

拙い質問内容から丁寧にくみ取っていただいて感謝しかありません! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問