フラスコ request.args.get
この説明で、request.args.get
の操作方法を学びます。 また、Flask で request オブジェクトとその属性を使用するときにエラーが発生する可能性のある方法についても学習します。
request.args.get
を使用して Flask でクエリ文字列を取得する
リクエストでクライアントの情報が必要な場合は、Flask モジュールの一部である request
変数を使用します。 これは、引数を取らないビュー関数であることがわかります。 アプリケーションのルートに接続されているだけです。
この request
変数はグローバル変数のように見えますが、そうではありません。 Flask からインポートされます。
これがマルチスレッド アプリケーションで、2つの要求が異なるクライアントから同時に受信された場合はどうなりますか? 関数は 2つの異なるスレッドで同時に実行され、両方とも参照要求を使用しています。
from flask import Flask, request
app = Flask(__name__)
app.config["SECRET_KEY"] = "NO_SECRETS"
@app.route("/")
def Main_Page():
Employee_Name = request.args.get("name")
return "<h2>Hello {}</h2>".format(Employee_Name)
if __name__ == "__main__":
app.run(debug=True)
各スレッドは正しい request
オブジェクトを取得します。 しかし、これは多くの混乱を引き起こし、多くの人はそれがどのように機能するかを理解していません.
Flask で request
オブジェクトを使用するときにエラーが発生する可能性のある方法
人々が非常にあいまいなエラーを経験し、時々何が起こっているのか誰も理解していない例をいくつか示します。 Python シェルを開きます。Flask から request
をインポートすれば問題ありません。
request.args.get()
を使用して http://127.0.0.1:5000/?name=jack
を使用して URL のクエリ文字列からアイテムを取得し、Flask request
オブジェクトがコンソール内にある場合、Working outside of request context
という有名なエラーが発生します。 これは、このエラーが発生する 1つの方法です。
>>> from flask import Flask ,request
>>> request.args.get('name')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python\lib\site-packages\werkzeug\local.py", line 432, in __get__
obj = instance._get_current_object()
File "C:\python\lib\site-packages\werkzeug\local.py", line 554, in _get_current_object
return self.__local() # type: ignore
File "C:\python\lib\site-packages\flask\globals.py", line 33, in _lookup_req_object
raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.
This typically means you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.
Flask がクライアントからリクエストを受信していて、ビュー関数を呼び出す必要があるとします。 Web ブラウザが提供する情報を受け取り、request
オブジェクトを作成します。
リクエスト コンテキストは、Flask が維持する構造です。 スレッドごとに 1つの要求コンテキストを維持します。
各スレッドは異なるリクエスト コンテキストを持ちます。 そのリクエストのリクエストオブジェクトをコンテキストに配置します。 コンテキストはオブジェクトのリストであるデータ構造であり、新しいリクエストが到着すると、Flask はビュー関数を呼び出します。
属性にアクセスしようとするたびに、Flask はビュー関数を呼び出して、クライアント リクエストにマップされるそのリクエスト オブジェクトを呼び出します。 各スレッドには異なる要求コンテキスト構造があるため、各スレッドは独自のサーバーを取得します。
ビュー関数から request.args
を使用すると、プロキシがアクティブになり、このスレッドのリクエスト コンテキストに保存されている request
オブジェクトが表示されます。 もちろん、アプリケーションを実行していないため、そのようなことはありません。 そのため、リクエストを受け付けていません。
この場合、Flask は、存在しないリクエスト コンテキストから request
オブジェクトを取得するように求めていることを検出します。 フラスコ アプリケーションを実行し、URL エンドポイントから request.args.get()
を使用して文字列クエリにアクセスしようとすると、次のようになります。
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