【ジャンゴ】ミドルウェア--2019-08-09午前10時10分27秒

オリジナル:http://106.13.73.98/__/41/

@
***
私たちはユーザーがログインしているかどうかを判断するためにビュー関数デコレータに追加することができ、ユーザーがログインしていない要求は、ログインページなどにジャンプ。私たちは、この要件によって装飾的な実装を追加し、いくつかの特定のビュー機能を与えるが、後でビュー機能もそれは少し面倒ではない、デコレータを追加する必要があります追加しました。

ミドルウェア - すべてが同じ操作機能を行うことが、私たちは同様の要求を達成するために、より適切な方法を使用することができます。

ミドルウェアとは何ですか?


公式声明:
処理のための==ミドルウェアはフレームレベルの要求と応答ジャンゴ==フックです。これは、グローバル==内ジャンゴ==入力と出力を変化させるための軽量、低レベルのプラグシステムです。各ミドルウェアコンポーネントは、いくつかの特定の機能を実行する責任があります。

その影響は、グローバルでの、その使用に注意する必要があるため、不適切な使用は== ==パフォーマンスに影響を与えることができます。

彼は、ミドルウェアは、私たちはビュー機能が実行される前と後の== ==行っていくつかの余分な作業を行うことができ、ぶっきらぼうに言いました。

==それはクラスは、要求の特定の時間にこれらの方法を実行するためにいくつかの方法、Djangoフレームワークを定義==カスタムクラスは、本質的です。

オープンDjangoのプロジェクトSettings.pyファイル、下図のミドルウェア設定項目を参照してください。
ここに画像を挿入説明
MIDDLEWARDの設定項目は、文字列は、実際、これらのクラス、メザニンがあり、リストは文字列で、リストです。

カスタムミドルウェア

5つのメソッドを定義することができますミドルウェアは以下のとおりです。

  1. process一(自己、リクエスト)
  2. process_view(自己、リクエスト、view_func、view_argsと、view_kwargs)
  3. process_template_response(自己、リクエスト、レスポンス)
  4. process_exception(自己、リクエスト、例外)
  5. process_response(自己、リクエスト、レスポンス)

上記の方法は、値を返すことがあり、それはどれもない場合なし、またはHttpResponseオブジェクトは、その後、後方のHttpResponseオブジェクト場合、このオブジェクトが直接ユーザに戻った、Djangoに定義された規則に従って進行しない続けています。

理解とprocess_responseに焦点を当てprocess一。
***

from django.utils.deprecation import MiddlewareMixin


class MD1(MiddlewareMixin):

    def process_request(self, request):
        print("我是MD1的process_request方法")

    def process_response(self, request, response):
        print("我是MD1的process_response方法")
        return response


class MD2(MiddlewareMixin):

    def process_request(self, request):
        print("我是MD2的process_request方法")

    def process_response(self, request, response):
        print("我是MD2的process_response方法")
        return response

コンフィギュレーション・ファイルに加えて、自己のミドルウェアミドルウェアsettings.pyの設定項目は、定義された:. ==アプリ名、ファイル名のクラス名を==。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 自定义中间件(注意顺序)
    'untitled01.my_middlewares.MD1',
    'untitled01.my_middlewares.MD2',
]


ミドルウェアの5つの方法


process一

==実行時間:==
ビュー関数前、ルート一致前
*
==パラメータ:==
リクエスト:リクエスト・オブジェクト、およびビュー・リクエストパラメータが同じオブジェクトで使用されている
-
==戻り値:==
なし:どこへ行くか、通常の手順に従って
のHttpResponseを:その後、前に行われたミドルウェアとミドルウェアprocess_response法の現在の実装を逆に、他のすべてのメソッドは、もはや実行されていません
。・
==:実行順序==
また、順ミドルウェアに登録に従って実行しますこのインデックスの値がリストであります


process_response

==実行時間:==
最後に実行

==パラメータ:==
リクエスト:リクエスト・オブジェクト、同じオブジェクトを表示するために使用される要求パラメータ
応答:応答オブジェクト、および応答は、同じビュー・オブジェクトで返し

= =戻り値:==
レスポンス:行くために、通常の手順に従って、このオブジェクトを返す必要があります
。・
実行順序==:==
逆の登録順に行わ
***

process_view

==実行時間:==
process一方法及び経路一致した後、ビュー前

==パラメータ:==
リクエスト:リクエスト・オブジェクト、同じオブジェクトの表示に使用要求パラメータ
view_funcを:ビュー関数(それが実行されますオブジェクトの実際の機能は)なく、名前の文字列の関数として、ある
view_argsとは:URLは、ビューパスタプル位置パラメータに渡される
view_kwargs:ビューパスURL辞書に渡されるパラメータの値のキー

==戻り値:==
なし:通常の手続きに従って行く
のHttpResponse:process_view、ミドルウェア、それは実行されません後に鑑み、すべてのミドルウェアprocess_response方法を実行

実行順序を==:==
登録の順に行わ
***

process_exception

==このメソッドは例外を考慮して実行された場合にのみトリガされる。==

==実行時間:==
ビューした後、前process_response

==パラメータ:==
リクエスト:リクエストオブジェクト、同じオブジェクトの表示に使用するリクエストパラメータ
例外:例外生産Exceptionオブジェクトのビュー

==戻り値:==
なし:通常の手順に従って行く
のHttpResponseオブジェクト:にprocess_exception後者の方法が実行されていない

実行順序==:==
逆実行の登録順
***

process_template_response

==このメソッドは、オブジェクト・ビュー機能を返す(またはオブジェクトまたはオブジェクトがTemplateResponse等価な方法であることを示す)のためにレンダリング()メソッドを持たなければならない行った。==
render()メソッドは、HTMLページを返します。

==実行時間:==
表示した後、にprocess_exception前
*
==パラメータ:==
リクエスト:リクエスト・オブジェクト、およびビュー・リクエストパラメータが同じオブジェクトで使用される
応答:TemplateResponseオブジェクト(ビュー関数またはミドルウェアによって生成されます)
*
==戻り値:==
レスポンス:行くために、通常の手順に従って、このオブジェクトを返す必要があります
。・
実行順序==:==
逆の登録順に実行さ

ミドルウェアの実装プロセス

要求は、各登録の正のシーケンスprocess一ミドルウェアの実行の第一の方法によれば、ミドルウェアに到達した後に、戻り値なしのprocess一方法である場合、それは順次実行、返された値がある場合、オブジェクトがもはやprocess一後者の方法が実行されないのHttpResponse、しかし、現在のメソッドprocess_responseオブジェクト指向ミドルウェアの実行、およびHttpResponseオブジェクトは、ブラウザに返さ。

すなわち、もし登録ミドルウェア6ミドルウェア、実装プロセス、HttpResponseオブジェクトは、その後、最初の4、5、6及びミドルウェアprocess_response方法が行われていないprocess一第三の中間戻るが、実行の順序3、process_response方法、ミドルウェア。
ここに画像を挿入説明
process一方法は、注文と実行のすべてprocess_view方法を継続する、ビュー機能は、最初のビューが実行されていない機能を実行するが、メソッドprocess_viewミドルウェアの最初の実装は、process_viewメソッドはNoneを返し見つけ、一致するルートを実行しています関数の実装の観点から、後。中間体3 process_view方法4。次に、のHttpResponseを返し、ビュー機能process_view 5た場合、図6に示すように行われていないが、最後の中間体から、中間process_response方法が逆である図6は、直接実行を開始します。
ここに画像を挿入説明
そしてprocess_template_responseのにprocess_exceptionを誘発する二つの方法は、条件付き実行の順序が逆順です。次のようにすべての要約実行プロセスは、次のとおりです。
ここに画像を挿入説明
ここに画像を挿入説明

リクエストフローチャートジャンゴ

ここに画像を挿入説明

オリジナル:http://106.13.73.98/__/41/

おすすめ

転載: www.cnblogs.com/gqy02/p/11325408.html
おすすめ