中间件

Posted liuyinzhou

tags:

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

技术分享图片  从上面的图可以看出,任何一个URL在进入路由系统之前,首先进入的是中间件。因此,对于某些需要大规模处理一些函数的时候,可以使用中间件,对于只需要个别函数添加功能,应该使用装饰器。

定义:

  中间件的本质就是很多的类,在类中有很多的方法,在一次URL进来之后这些类的方法会自动被调用执行。

  所有的中间件类都有两个方法:

    process_request()

    process_response(),此方法必须设置返回值

自定义中间件:

  在项目的根目录下创建任意名字的包文件夹,然后在新创建的文件夹下创建任意名字的py文件。py文件的代码如下:

  

 1 from django.utils.deprecation import MiddlewareMixin
 2 from django.shortcuts import HttpResponse,redirect
 3 
 4 
 5 class AuthMiddleware(MiddlewareMixin):#所有的中间件必须继承MiddlewareMixin类
 6     # 客户端发来请求之后要执行的函数
 7     def process_request(self,request):
 8         # 这里是为/login/页面添加到白名单,即/login/不需要进行Session认证。设置返回值为None,即本中间件不对其做任何
 9         # 处理,交给后续步骤处理
10         if request.path_info == "/login/":
11             return None
12 
13         #任何页面在显示之前都要进行Session验证
14         user_info = request.session.get("user_info")
15         # 如果从用户的请求中获取不到Session的值,则跳转到login页面
16         if not user_info:
17             url = request.get_full_path()
18             # 将之前要访问的地址作为参数拼接到login url后面
19             return redirect(/login/?from={}.format(url))
20     # 服务端给客户端回应要执行的函数
21     def process_response(self,request,response):
22         return response

注册自定义的中间件

 1 MIDDLEWARE = [
 2     django.middleware.security.SecurityMiddleware,
 3     django.contrib.sessions.middleware.SessionMiddleware,
 4     django.middleware.common.CommonMiddleware,
 5     django.middleware.csrf.CsrfViewMiddleware,
 6     django.contrib.auth.middleware.AuthenticationMiddleware,
 7     django.contrib.messages.middleware.MessageMiddleware,
 8     django.middleware.clickjacking.XFrameOptionsMiddleware,
 9     app01.middleware.auth.AuthMiddleware,
10 ]

 

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

Sublime Text3自定义代码片段

无法更新 View Pager 中的中间片段。

Android - 从堆栈中间删除特定片段不起作用

从没有中间转换变量的片段中观察 ViewModel LiveData

如何将数据从顶点着色器传递到片段着色器,中间有着色器[重复]

如何定义对话框片段的重力?