回答編集履歴

1

追加質問に回答

2022/02/18 06:48

投稿

FiroProchainezo
FiroProchainezo

スコア2401

test CHANGED
@@ -75,3 +75,70 @@
75
75
 
76
76
  なので、じゃんけんの手をPOSTで送って、結果として「出した手と勝敗」の2つを受け取りたい場合は、POSTのresponseとして「出した手と勝敗」を返して下さい。
77
77
 
78
+
79
+ # 2022/02/18追記
80
+
81
+ > <form method='POST'>や<form method='GET'>をhtmlの方で書くと思うのですが、そのmethodと、pythonで書く@app.route('/login', methods=['POST', 'GET'])は関係ないのでしょうか??
82
+
83
+ formのmethodはそれを使ってHTTPリクエストすると言う意味で、
84
+ flask側のmethodはそのメソットの場合の処理という感じの意味なので、
85
+ リンクしているわけではありませんから、関係あることはあるし、無いと言えば無いという感じの回答になると思います。
86
+
87
+ リンクさせているのは、そのように設計したプログラマだったりで、ブラウザとサーバが勝手に良い感じにリンクしてくれるわけではありません。
88
+
89
+ > htmlにmethod='POST'しか書いていないのにelif request.method == 'GET':がTrueになるコードを見たのですが、どうしてそうなるのでしょうか?
90
+ > 私の中では、<form>で囲ったインプット(HTMLのinput type='submit'とかinput type='text')は、formで書いたメソッド(GETなたGET,POSTならPOST)でいくものだと思っていたのですが、違うのでしょうか??
91
+
92
+ ドキュメントを探したのですが、明確なドキュメントが見当たらなかったので「ここに書いてあるとおり」とはできませんが、 `<a>` 要素を使ったハイパーリンクの場合、GETメソッドでアクセスされます。
93
+
94
+ 例えば、以下のコードを使うとします。
95
+
96
+ htmlを見ると、formの中に `<a>` `<input>` `<button>` があるのがわかります。
97
+
98
+ aoiriyu0406さんさんの考えでは、`action='post'` が指定されているformの中にあるリンクは、全てそのメソッドでrequestしてくれるのではないかと思いますが、実際には異なります。
99
+
100
+ `<a>` の場合はGET。
101
+ `<input>` の場合はPOST。
102
+ `<button>` の場合はPOSTとなります。
103
+
104
+ ```python
105
+ from flask import Flask, request, render_template
106
+
107
+ app = Flask(__name__)
108
+
109
+
110
+ @app.route('/', methods=['POST', 'GET'])
111
+ def index():
112
+ if request.method == 'GET':
113
+ print('get')
114
+ else:
115
+ print('not get')
116
+
117
+ return render_template('index.html')
118
+
119
+
120
+ if __name__ == '__main__':
121
+ app.run()
122
+ ```
123
+
124
+ ```html
125
+ {# index.html #}
126
+ <!DOCTYPE html>
127
+ <html lang="en">
128
+ <head>
129
+ <meta charset="UTF-8">
130
+ <title>Title</title>
131
+ </head>
132
+ <body>
133
+
134
+ <form method="post" action="{{ url_for('index') }}">
135
+ <a href="{{ url_for('index') }}">element a</a>
136
+ <input type="submit" name='myhand' value="input">
137
+ <button type="submit" name="myhand" value="button">button</button>
138
+
139
+ </form>
140
+ </body>
141
+ </html>
142
+ ```
143
+ メソッドが気になる場合は、ブラウザ付属の開発者ツールを使って、Networkを確認すると良いかもしれません。
144
+