Flask の Post リクエスト

Salman Mehmood 2022年7月12日
Flask の Post リクエスト

この説明では、2つの基本的な HTTP メソッド(getpost)について学習し、それらの違いも学習してから、Flask の基本的なフォームからデータを送信する方法の基本的な例を示します。

Flask で Post リクエストを使用する

HTTP メソッド、get および post リクエストについて説明します。あなたはおそらく以前にこれらの両方を聞いたことがあるでしょう。get は、情報の送信方法に応じて、Web サイトまたはクライアントに情報を取得または送信する最も一般的な方法です。

Post はこれを安全に行う方法です。get は本質的に、情報を取得するための安全でない方法です。最も一般的に使用されます。アプリを実行して参照すると、ホームページがある場所に接続されていることがわかります。ステートメントがポップアップして get と表示されるコンソールに移動すると、

これは何を意味するのでしょうか?基本的に、ここで何かを入力するときは常に安全ではありません。つまり、誰でもそれを見ることができることを知っています。

サーバーに送信され、get メソッドを使用して実際の Web ページが返されるのは安全な情報ではありません。

from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return "Hi there, this is testing"


if __name__ == "__main__":
    app.run(debug=True)

出力:

get メソッド

post リクエストを使用すると、暗号化された安全な情報を送信でき、どちらのエンドポイントからも表示されません。実際の Web サーバーには保存されないため、これが getpost の違いです。

おそらく最善の方法で説明したわけではありませんが、この記事を通じて、それらの主な違いと、セキュリティで保護されていないリクエストの送信に使用される get メソッドとセキュリティで保護された post リクエストの基本的な考え方を理解します。データの送信には、通常、フォームデータの送信に使用されます。

基本的な例を見てみましょう。このアプリでいくつかの異なるページを設定したいと思います。誰かがボタンを使用して入力して送信できるダイアログボックスを備えたスクリプトを作成します。これは、Post リクエストを使用して行います。

LOGIN() というメソッドを使用してページを設定し、これを上部にデコレータを付けて、"/login"を配置します。まだ見たことのない別の側面、つまりメソッドを追加する必要があります。

このログインページで使用できるため、デフォルトでは、接続するか、いくつかのページの 1つに移動すると、get リクエストが表示されます。これは、その情報を取得する必要があることを意味しますが、実行されません。安全を確保するために、post メソッドという別のメソッドがあります。

デコレータ内では、リストを取得する methods という引数を使用する必要があります。次に、リスト内に postget を配置します。

@app.route("/login", methods=["POST", "GET"])

問題は、この login 関数で、get リクエストを呼び出したか、Post リクエストを呼び出したかをどのように判断できるかということです。request のインポートを開始し、if ステートメントで使用して、get リクエストまたは post リクエストでこのページに到達するかどうかを確認する必要があります。

Post がある場合は、ユーザーをリダイレクトしてデータをユーザーページに送信し、そこでデータを表示できます。また、フォームディクショナリのキーとして Data を使用し、name という属性を持つ login.html ファイルからアクセスします。

get リクエストがある場合は、render_template() メソッドを使用してログインページをレンダリングします。

def LOGIN():
    if request.method == "POST":
        UER_DATA = request.form["DATA"]
        return redirect(url_for("USER", usr=UER_DATA))
    else:
        return render_template("login.html")

次に、もう 1つのページを作成する必要があります。関数の名前は、USER() になります。これは、usr という変数を取ります。テンプレートを返す代わりに、基本的な HTML を返します。

@app.route("/<usr>")
def USER(usr):
    return f"<h1>{usr}</h1>"

次に、単純な HTML フォームとなるこのログインページを作成する必要があるため、templates フォルダー内に login.html ファイルを作成します。このファイル内では、Bootstrap スターターテンプレートを使用します。body タグ内で、フォームの作成を開始します。

method 属性を使用しました。この場合、情報を取得せずに情報を投稿するため、メソッドは post になります。通常、ここに get を入力すると、サーバーから取得した情報をこのフォームに入力します。

 <h1>Hello, this is login page!</h1>
    <form action="#" method="post">
        <p>Name:</p>
        <p><input type="text" name="DATA" /></p>
        <p><input type="submit" value="submit"/></p>
    </form>

上記で説明した app.py ファイルの完全なソースコードは次のとおりです。

from flask import Flask, render_template, redirect, url_for, request

app = Flask(__name__)


@app.route("/")
def INDEX():
    return render_template("index.html")


@app.route("/login", methods=["POST", "GET"])
def LOGIN():
    if request.method == "POST":
        UER_DATA = request.form["DATA"]
        return redirect(url_for("USER", usr=UER_DATA))
    else:
        return render_template("login.html")


@app.route("/<usr>")
def USER(usr):
    return f"<h1>{usr}</h1>"


if __name__ == "__main__":
    app.run(debug=True)

出力:

Flask ポストリクエスト

コンソール出力:

FlaskPost リクエスト-コンソール出力

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn