Day25 实作MiddleWare(2)

昨天跟大家介绍完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函数就大概介绍完了,那我们今天就先到这边吧!

大家掰掰!!


<<:  Day25 来人上菜! 给我来点Cookie and Session

>>:  [Day 26] - 『转职工作的Lessons learned』 - Cube.js(II)

开源网路钓鱼框架-Gophish(补充)

今天下班後去学校上课 回到家後就11点多了...... 就简单说明关於Gophish操作可能遇到的几...

[iT铁人赛Day1]JAVA下载与执行

JAVA是一个大家既熟悉又陌生的程序语言 稍微知道怎麽编写但会写错,也可能写还不知道怎麽储存,还有不...

Day 6 - 产生内文加密所需的 IV 值

图 6-1: 各栏位资料范例 发送给 Order API 的栏位资料只差 Message 栏位了。...

DAY08 - Emmet与PUG简介

在那个用记事本写HTML的年代 (讲古时间) 大叔我在1996年五专入学念资管系,一年级就接触到网页...

[Day 14] 实作 API Role-Based Authorization

因为 Ktor 本身只有实作 Authentication 机制,不像 Spring Securit...