昨天跟大家介紹完middleware的基本建立後,大家有沒有理解並成功做出來呢!
如果對於這部分還有一點疑惑,記得可以去支持下那位作者介紹的文章!
而除了我們昨天介紹的那個方法之外,其實我們如果仔細看Django middleware的官方文件的話,它其實還會有額外的三種方式可以自訂自己的middleware。
分別是:
以下是他們的範例程式碼:
def process_view(self, request, view_func, view_args, view_kwargs):
# process_view() is called just before Django calls the view.
# It should return either None or an HttpResponse object
logger.warning('---- 2 ----')
return None
def process_exception(self, request, exception):
# Django calls process_exception() when a view raises an exception
# It should return either None or an HttpResponse object
logger.warning('---- exception.args ----')
return None
def process_template_response(self, request, response):
# return TemplateResponse object
logger.warning('---- 3 ----')
return response
第一個函數process_view(),我們如果看官方文件的解釋的話,你會看到以下這句:
process_view() is called just before Django calls the view.
它最主要的意思就是說,會在你呼叫views裡的東西之前先呼叫這個函數。
所以如果我們的middleware加上這行,重run一遍後就會在-1-的後面先run到這個函數再回到原本的函數。
第二個函數process_exception(),它的官方文件解釋是:
Django calls process_exception() when a view raises an exception.
這函數就是在你的程式出現錯誤像是(數字除以零)這種exception它就會直接run到這個函數。
需要注意的是,即使它因為錯誤所以出現錯誤碼後,最後面依然會跑回原本的函數裡。
第三個函數process_template_response(),它的官方解釋是:
process_template_response() is called just after the view has finished executing, if the response instance has a render() method, indicating that it is a TemplateResponse or equivalent.
這函數主要的用法就是當你return的東西是TemplateResponse的話,就會跑到這個函數裡面再回去。
了解這三個比較特殊的函數後,可以根據你自己的需要來製作middleware。
到這邊基本的middleware函數就大概介紹完了,那我們今天就先到這邊吧!
大家掰掰!!