63.django中间件

Posted learningonline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了63.django中间件相关的知识,希望对你有一定的参考价值。

1.定义

  一个用来处理Django的请求和响应的框架级别的钩子(函数),相对比较轻量级,并且在全局上改变django的输入与输出(使用需谨慎,否则影响性能)

  直白的说中间件就是帮助我们在视图函数执行之前和执行之后做一些额外操作

2.用处

  用户登录

  日志记录

  权限管理

  请求验证(post)

  一般对所有请求做批量处理的时候用中间件,单独对某几个函数处理直接使用装饰器

3.用法说明

  我们使用django一直就在使用中间件,打开django的setting文件,当中的MIDDLEWARE配置项

MIDDLEWARE = [
    django.middleware.security.SecurityMiddleware,
    django.contrib.sessions.middleware.SessionMiddleware,
    django.middleware.common.CommonMiddleware,
    django.middleware.csrf.CsrfViewMiddleware,
    django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
    django.middleware.clickjacking.XFrameOptionsMiddleware,
]

列表当中的每个字符串,其实是一个个类,即一个个中间件,它们正常的执行顺序都是自上而下的

中间件中,我们可以定义五个方法,分别是:

process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)

其中最常用的是process_request和process_response

以上方法的返回值可以是None或一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将该对象返回给用户。

3.1图例说明

这里还是先来看看django的生命周期图例

技术分享图片

 先从上图了解django执行流程,每一步起了那些关键性作用,然后我们再来讨论每一个中间件

3.2 process_request  

  它有一个request参数,这个和视图函数中的request参数一模一样

  返回值是None,则按正常流程继续执行,交个下个中间件来做处理,如果是HttpResponse对象,Django将不执行视图函数,而将响应对象返回给浏览器。

代码实例

 

以上是关于63.django中间件的主要内容,如果未能解决你的问题,请参考以下文章

63django之模版层(template)

63 django简介

day63 django-part2

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

Sublime Text3自定义代码片段