【初心者向け】flaskでPOST送信してみる。

flaskでpost送信するのに、どんな例があるかを知りたい。

という人向けに今回の記事を書いています。

この内容を身に着ければ、ユーザーが入力した値を自由に取得してあーだこーだすることができます。

postメソッドの基本的なところを押さえているので、ぜひ最後まで読んでみてください。

POST送信は何のため

通常、パソコンやスマホがサーバーとやり取りするのは、「リクエスト」と「レスポンス」で成り立っています。

POST送信とは、この「リクエスト」の中の一つの種類なのです。

種類としては、「POST送信」「GET送信」の二種類があります。

では、POST送信とGET送信の違いとは何でしょうか??

POSTとGETの違い

GET送信

=サーバーに渡す値をURLにつけて送信する方法です

URLの中に「?」があると思いますが、そのあとに続く文字が、GET送信によってサーバーに送られる情報です。

例えば以下のような感じですね。

では、POST送信はどう違うのでしょうか。

POST送信

=サーバーに渡す値を見えない状態で送信する方法です。

GET送信ではサーバーに送る情報がURLに乗っているので、ユーザーは値を見ることができてしまいます。

そのため、ユーザーの個人情報などをサーバーにGET送信するのは、とても危険です。

なので、他のユーザーに見えてはいけない情報などは、POST送信で行う必要があります。

サーバーがPOSTとGETを受け取る

ユーザーからリクエストを受けたサーバーは、POST送信とGET送信で送られた情報を取得する必要があります。

取得する方法もそれぞれ違います。

以下それぞれの場合のサーバー側の書き方です。

【GETメソッドで送信した場合】

@app.route('/')
def index():
    value = request.args.get('変数名')

【POSTメソッドで送信した場合】

@app.route('/')
def index():
    value = request.form.get('変数名')

どちらもFlaskでパラメーターを取り出す方法です。

以下のコード例でもこれらを使いますので、今はとりあえず「このように区別するんだ」って感じで思っておいてください。

reuquestを使ったメソッドはflaskには他にもあります。以下の記事で解説していますので、併せて読んでみてください。

POST・GETを使ってフォーム送信(コード例)

今回作成するファイルは、app.pyとindex.htmlの二つです。

ディレクトリの配置は以下のようになっています。

app.py
templates
- index.html

以下コードです。

from flask import Flask , request,render_template
import os 

#インスタンスの作成
app = Flask(__name__)
app.secret_key = os.urandom(21)

@app.route('/')
def get():
    para = request.args.get('field',None)
    return render_template('index.html',message=para)

@app.route('/',methods = ['POST'])
def post():
    message = request.form.get('field')
    return render_template('index.html',message=message)

if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>index</title>
    </head>
    <body>
        <h2>{{ message }}</h2>
        <form method="POST" action="/">
            <input type="text" name="field">
            <input type="submit" value="POST送信">
        </form> 
        <form method="GET" action="/">
            <input type="text" name="field">
            <input type="submit" value="GET送信">
        </form> 
    </body>
</html>

POST送信とGET送信の二つのフォームを設置しています。

フィールドに入力した、値を取得して、{{ message }} に表示します。

app.route('/' , methods=['POST'])  
app.route('/' , methods=['GET'])

メソッドを指定することで、POSTかGETどちらの値を取得するのかを判定しています。

ちなみに、methodsを書かなければ、GETと判断されます。(今回はそれ)

なお、render_template()は「htmlのこのファイルを開いて!」と指定するコマンドです。

レスポンスとして返すコマンドは他にもあります。以下の記事で解説しているので、併せて読んでみてください。

以上のファイルを実行すると以下のようになります。

GETメソッド実行

GETメソッドを実行したときは、URLにfield=○○と入力されているのがわかります。

POSTメソッドでは、表示されませんので、ぜひ試してみてください。

まとめ

今回は、GETとPOSTメソッドについて解説しました。

以下の記事では、フォーム送信使ったログイン機能を実装しています。併せて読んでみてください。

(Visited 7 times, 1 visits today)