FlaskやDjangoなどのWebフレームワークのミドルウェアは、サーバーとリクエスト/応答サイクルの間のブリッジとして機能する重要なコンポーネントです。両方のフレームワークでは、ミドルウェアはアプリケーションのリクエスト/応答処理への一連のフックです。これらのフックは、各リクエストの前後に呼び出され、リクエストと応答の処理に変更または追加が可能になります。
Djangoでは、ミドルウェアは通常、要求/応答サイクルの異なる段階でトリガーされる特定の方法を持つクラスとして実装されます。これらの方法には、 process_request
、 process_view
、 process_template_response
、 process_response
、およびprocess_exception
含まれます。
フラスコでは、ミドルウェアの機能は、デコレータの使用またはFlask
アプリケーションオブジェクトを拡張することで実現できます。 Flaskには、Djangoのようにミドルウェアの組み込み概念はありませんが、 before_request
、 after_request
、およびFlask
クラスが提供するその他のフックなどの方法を使用して同様の機能を実現できます。
ミドルウェアは、いくつかの重要な方法で、フラスコおよびDjangoアプリケーションの機能を強化します。
Djangoにカスタムミドルウェアを実装するには、次の手順に従ってください。
ミドルウェアクラスの作成:介入する要求/応答サイクルのポイントに対応するメソッドを使用してクラスを定義します。最も一般的に使用される方法は、 process_request
とprocess_response
です。
<code class="python">class CustomMiddleware: def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def __call__(self, request): # Code to be executed for each request before # the view (and later middleware) are called. response = self.get_response(request) # Code to be executed for each request/response after # the view is called. return response def process_request(self, request): # Modify the request object if needed. pass def process_response(self, request, response): # Modify the response object if needed. return response</code>
ミドルウェアを設定に追加する:Djangoプロジェクトのsettings.py
でMIDDLEWARE
設定にミドルウェアを含める。
<code class="python">MIDDLEWARE = [ # Other middleware... 'path.to.your.CustomMiddleware', ]</code>
フラスコでは、正式なミドルウェアの概念はありませんが、デコレーターとフックを使用して同様の機能を実現できます。
デコレーターの使用:Flaskのbefore_request
およびafter_request
デコレータを使用して、ミドルウェアのような動作を実現できます。
<code class="python">from flask import Flask, request, g app = Flask(__name__) @app.before_request def before_request(): g.start_time = time.time() @app.after_request def after_request(response): duration = time.time() - g.start_time response.headers['X-Request-Duration'] = str(duration) return response</code>
拡張フラスコ:フラスコアプリケーションオブジェクトを拡張して、リクエスト/応答サイクルにカスタム動作を追加することもできます。
<code class="python">class CustomFlask(Flask): def __init__(self, *args, **kwargs): super(CustomFlask, self).__init__(*args, **kwargs) self.before_request(self.before_request_callback) self.after_request(self.after_request_callback) def before_request_callback(self): # Custom logic before each request pass def after_request_callback(self, response): # Custom logic after each request return response app = CustomFlask(__name__)</code>
FlaskとDjangoのミドルウェアは、さまざまな目的に使用されます。最も一般的なものには次のものがあります。
これらのユースケースは、FlaskおよびDjangoアプリケーションの機能、セキュリティ、およびパフォーマンスを向上させる際のミドルウェアの汎用性と重要性を示しています。
以上がFlask(またはDjango)のミドルウェアとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。