Django中间件

1、Django中间件简介

  官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每一个中间件组件都负责作一些特定的功能。html

  可是因为其影响的是全局,因此须要谨慎使用,使用不当会影响性能。前端

django中间件就相似因而django的保安,消息来的时候和响应走的时候 都必须走过中间件django

优势:后端

  中间件能够作全局的访问频率校验 身份校验 。。。
  只要是涉及到全局的 你均可以考虑使用中间件来作!!!浏览器

 

django默认有七个中间件,也支持用户自定义中间件
自定义中间件 django暴露给用户五个能够自定义的方法session

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',
]

1.1 自定义中间件

  中间件里写的方法影响的是全局:app

    网站全局校验:若是用户没有登陆,网站里都不能访问框架

  中间件能够定义五个方法,分别是:(主要的是process_request和process_response)函数

# 五个方法
        # 掌握
        process_request:请求来的时候,会依次(从上往下的顺序)执行每个中间件里面的process_request方法(若是没有定义那么直接经过)
        process_response:响应走的时候,会依次(从下往上的顺序)执行每个中间件里面的process_response方法
        # 了解
        process_views
        process_templates_response
        process_exceptions

Django如何执行request和response方法性能

  request 它的返回值能够是None也能够是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理,若是是HttpResponse对象,Django将不执行视图函数,而将相应对象返回给浏览器

# 自定义中间件    
    1.新建一个任意名称的py文件
    2.文件内 写类继承中间件的总类

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
class MyMidd(MiddlewareMixin): 
  
def process_request(self,request): print("我是第一个中间件里面的process_request方法")
    # return HttpResponse("若是这里有返回的话,访问到第一个中间件完成后就返回了")
def process_response(self,request,response): # response后端固定返回给前端的结果 print("我是第一个中间件里的process_response方法") return response class MyMidd1(MiddlewareMixin): def process_request(self,request): print("我是第2个中间件里面的process_request方法") def process_response(self,request,response): print("我是第2个中间件里的process_response方法") return response

# 中间件注册 setting.py中MIDDLEWARE里添加
'app01.mymiddleware.mymidd.MyMidd',  # 项目名称.中间件放置的目录.文件名称.中间件名称
'app01.mymiddleware.mymidd.MyMidd1',

详细请查看:https://www.cnblogs.com/Dominic-Ji/p/9229509.html

相关文章
相关标签/搜索