Django 中间件以及自定义中间件

Django中间件

Django中间件是Django的门户

  • 请求来的时候需要先经过中间件才能达到真正的Django后端
  • 响应走的时候最后也要经过中间件才能发送出去
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',
]

# 均为Django中间件

取其中三个查看源码。

from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.auth.middleware import AuthenticationMiddleware
from django.contrib.messages.middleware import MessageMiddleware

# process_request
# process_response
两者基本所有中间件都具有

Django支持程序员自定义中间件并且暴露给程序员五个可以自定义的方法

1.process_request
2.process_response
3.process_view
4.process_template_response
5.process_exception

自定义中间件

如何自定义中间件?

  1. 在项目名或者应用下创建一个任意名称的文件夹
  2. 在该文件夹内创建一个任意名称的py文件
  3. 在该py文件中需要书写类,这个类必须继承(MiddlewareMixin)
  4. 需要将类的路径以字符串的形式注册到settings配置文件中(MIDDLEWARE)
from django.utils.deprecation import MiddlewareMixin


class Mymiddleware1(MiddlewareMixin):
    def process_request(self, request):
        print('我是第一个process_request方法')

    def process_response(self, request,response):
        print('我是第一个process_response方法')
        return response


class Mymiddleware2(MiddlewareMixin):
    def process_request(self, request):
        print('我是第二个process_request方法')

    def process_response(self, request,response):
        print('我是第二个process_response方法')
        return response

process_request: 请求来的时候

# process_request
 1.请求来的时候需要经过每一个中间件里面的process_request方法,结果的顺序是按照匹配文件中注册的中间件从上往下的顺序一次执行。
 2.如果中间件里面没有定义该方法,那么请求将不再继续往后执行
 3.如果该方法返回了HttpResponse对象,那么请求将不再继续往后执行而是直接原路返回(可用作检验用户是否为黑名单,校验失败不允许访问等需要验证的地方)
 'process_request方法就是用来做全局相关的所有限制功能'

process_response: 响应请求走的时候

1.响应走的时候需要经过每一个中间件里面的process_response方法,该方法有两个额外的参数request,response。
2.该方法必须返回一个HttpResponse对象
	2.1默认返回的就是形参request
  2.2也可以返回自己的
3.顺序是按照配置文件中注册从下往上的一次经过,如果没有定义,直接跳过执行下一个

如果在第一个process_request方法返回HttpResponse,会怎样?

会直接走同级别的process_request返回。

process_view,process_template_response,process_exception

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值