iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0

昨天跟大家介紹完middleware的基本建立後,大家有沒有理解並成功做出來呢!
如果對於這部分還有一點疑惑,記得可以去支持下那位作者介紹的文章
而除了我們昨天介紹的那個方法之外,其實我們如果仔細看Django middleware的官方文件的話,它其實還會有額外的三種方式可以自訂自己的middleware。
分別是:

  • process_view()
  • process_exception()
  • process_template_response()

以下是他們的範例程式碼:

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函數就大概介紹完了,那我們今天就先到這邊吧!

大家掰掰!!


上一篇
Day24 實作MiddleWare(1)
下一篇
Day26 實現郵件寄送(1)
系列文
菜雞從零開始學習Django的成長日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言