Flask の Post リクエスト
この説明では、2つの基本的な HTTP メソッド(get
と post
)について学習し、それらの違いも学習してから、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)
出力:
post
リクエストを使用すると、暗号化された安全な情報を送信でき、どちらのエンドポイントからも表示されません。実際の Web サーバーには保存されないため、これが get
と post
の違いです。
おそらく最善の方法で説明したわけではありませんが、この記事を通じて、それらの主な違いと、セキュリティで保護されていないリクエストの送信に使用される get
メソッドとセキュリティで保護された post
リクエストの基本的な考え方を理解します。データの送信には、通常、フォームデータの送信に使用されます。
基本的な例を見てみましょう。このアプリでいくつかの異なるページを設定したいと思います。誰かがボタンを使用して入力して送信できるダイアログボックスを備えたスクリプトを作成します。これは、Post
リクエストを使用して行います。
LOGIN()
というメソッドを使用してページを設定し、これを上部にデコレータを付けて、"/login"
を配置します。まだ見たことのない別の側面、つまりメソッド
を追加する必要があります。
このログインページで使用できるため、デフォルトでは、接続するか、いくつかのページの 1つに移動すると、get
リクエストが表示されます。これは、その情報を取得する必要があることを意味しますが、実行されません。安全を確保するために、post
メソッドという別のメソッドがあります。
デコレータ内では、リストを取得する methods
という引数を使用する必要があります。次に、リスト内に post
と get
を配置します。
@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)
出力:
コンソール出力:
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