Process_viewの実行順序は、settings.pyを実行するためにもあります
urls.py process_view対応関係の後に、機能は、ビューの前に行わ
それはNoneを返した場合、ミドルウェア機能の裏に進んでprocess_view
HttpResponse戻り、その後のprocess_view機能が実行されていない場合、機能実行process_responseにスキップ
middleware_test.py:
インポートMiddlewareMixinのdjango.utils.deprecation django.shortcutsからはHttpResponseにインポートし 、クラスをテスト(MiddlewareMixin): DEF process一(セルフ、要求): 印刷( "それはミドルウェアである- >テスト") DEFのprocess_response(セルフ、要求、応答): 印刷( "これはのHttpResponseのテストである") を返すのHttpResponse() "これはテストリターンのHttpResponseである" DEFのprocess_view(セルフ、リクエスト、view_func、view_argsと、view_kwargs): ' '' :PARAM要求:ブラウザが送られましたリクエスト要求オブジェクト :PARAM view_func:実行するビューの関数名 :PARAM view_argsと:実行するビュー機能の位置 :PARAM view_kwargs:実行するキーワード表示機能 :リターン: 「」" 印刷( "これはprocess_view機能のテストである") (タイプ(view_func)のview_func、)印刷 クラスにTest2(MiddlewareMixin): DEF process一(セルフ、要求): 印刷( "これはミドルウェアである- > TEST2") DEFのprocess_response (自己、要求、応答): 印刷( "ここにTest2のはHttpResponse") はHttpResponseを返す( "これはのHttpResponseを返すにTest2である") DEFのprocess_view(SELFM、リクエスト、view_func、view_argsと、view_kwargs): 印刷(「これはTest2をありますprocess_view機能「) を印刷(タイプのview_func、(view_func))
views.py:
django.shortcutsからのHttpResponseをインポート DEF指数(要求): 印刷(「これはインデックスページである」) はHttpResponseを返す(「ここのメインページインデックスがあります」)
訪問は、http://127.0.0.1:8000 /インデックス/
結果:
実装プロセス:
process一関数が最初に実行し、その後機能ビューを実行する前にprocess_view機能を実行し、ビュー機能を実行し、機能は最後process_responseを行います
process一にのみ実行された後、それが機能ビューを実行する前に、実行されるビュー機能を見つけ、最初の実行ミドルウェアprocess_view機能をルートと一致し、Noneを返します
ビュー機能process_viewを実行される機能の全てを実行した後、次の方法process_viewミドルウェアを続けると、リターンprocess_viewなした後であれば
返さprocess_viewのHttpResponseがある場合は、それに続くprocess_view機能を実行しない、それは最初process_response関数にジャンプし、そしてダウン続けます
例えば、中間の戻りのHttpResponse process_view 3は、もはや、その後の中間4,5,6ミドルウェア、ミドルウェアprocess_response直接ジャンプ機能6を実行せず、その後、中間体5,4,3を実行します2,1
process一関数のHttpResponseオブジェクトが返された場合、後続process一機能を実行しないprocess_view機能を行わない、対応する関数へのジャンプはprocess_response実行されます