Django學習10
阿新 • • 發佈:2020-08-10
django請求生命週期
請求 -- wsgi封裝socket和http協議解包 -- 順序執行中介軟體 -- url控制器 -- view檢視函式 -- 倒序執行中介軟體 -- wsgi按http協議封裝響應資料 -- 響應
中介軟體
自定義中介軟體
1.應用下建立一個資料夾,資料夾下面建立一個xx.py檔案 from django.utils.deprecation import MiddlewareMixin class MD1(MiddlewareMixin): def process_request(self,request): ... def process_response(self,request,response): ... return response 2.在settings.py MIDDLEWARE 中寫入自定義中介軟體的路徑(多箇中間件的話注意擺放順序)
中介軟體方法
1.process_request方法(*): def process_request(self,request): ... # 它的返回值為None或者HttpResponse物件.返回值如果為None,交給下一個中介軟體處理,流程正常.如果是HttpResponse物件,則直接開始返回流程,並將該HttpResponse作為response返回給瀏覽器. # 多箇中間件中的process_request方法是按照MIDDLEWARE中的註冊順序 順序 執行的. 2.process_response方法(*): def process_response(self,request,response): ... return response # response是檢視函式返回的HttpResponse物件.該方法必須返回HttpResponse物件. # 多箇中間件中的process_response方法是按照MIDDLEWARE中的註冊順序 倒序 執行的. 3.process_view方法: def process_view(self, request, view_func, view_args, view_kwargs): ... # view_func是Django即將使用的檢視函式 4.process_exception方法: def process_exception(self, request, exception): ... # 檢視函數出錯才會執行 5.process_template_response方法(用的比較少): def process_template_response(self, request, response): ... # 它的引數,request是HttpRequest物件,response是TemplateResponse物件(由檢視函式或者中介軟體產生). # process_template_response是在檢視函式執行完成後立即執行,但是它有一個前提條件,那就是檢視函式返回的物件有一個render()方法.注意!此render()不是我們平時模板渲染的方法! views.py: def index(request): print('我是index檢視函式') def render(): print('我是自定義的render') return HttpResponse('我是自定義的render方法的返回值') # 最後頁面拿到的結果是這個 ret = HttpResponse('我是index檢視函式的返回值') # 這個HttpRequest物件的內容沒有意義,會被覆蓋 ret.render = render # 將自定義的render方法作為屬性封裝給了HttpRequest物件 return ret 自定義中介軟體: def process_template_response(self, request, response): ... return response # 這個方法也必須要返回response
小結:搞清楚整個django請求的生命週期是重點,這樣才能知道哪個環節可以拓展.中介軟體的學習重點在於搞清楚中介軟體的執行順序,以及其方法的執行順序,在做這方面專案或練習的時候最好畫個草圖,這樣邏輯會更加清晰.