首页 > 其他分享 >9.django-中间件

9.django-中间件

时间:2022-11-17 12:44:59浏览次数:51  
标签:process 中间件 self request django response

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出

中间件会在url到路由分发之前通过,在响应客户端之前会再次通过

中间件有很大的应用:某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

 

 

Django默认的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',
]

 

中间件定义的函数一共有5个,常用的就是前两个

  • process_request(self, request):这个方法的调用时机在Django接收到request之后,但仍未解析URL以确定应当运行的视图函数
  • process_response(self, request, response):这个方法的调用时机在 Django 执行 view 函数并生成 response 之后
  • process_view(self, request, callback, callback_args,callback_kwargs):调用时机在 Django 执行完 request 预处理函数并确定待执行的 view (即callback参数)之后,但在 view 函数实际执行之前。
  • process_exception(self, request, exception): request 处理过程中出了问题并且view 函数抛出了一个未捕获的异常时才会被调用
  • process_template_response():默认不执行,只有在视图函数的返回结果对象中有render方法才会执行,并把对象的render方法的返回值返回给用户

1.自定义中间件

from django.utils.deprecation import MiddlewareMixin


class Md1(MiddlewareMixin):

    def process_request(self, request):
        print("Md1请求")
        # return HttpResponse("Md1中断")    # 拦截

    def process_response(self, request, response):
        print("Md1返回")
        return response


class Md2(MiddlewareMixin):

    def process_request(self, request):
        print("Md2请求")
        # return HttpResponse("Md2中断")

    def process_response(self, request, response):
        print("Md2返回")
  1. process_request默认返回None,返回None,则继续执行下一个中间件的process_request;一旦返回响应体对象,则会拦截返回。

  2. process_response必须有一个形参response,并return response;这是view函数返回的响应体,像接力棒一样传承给最后的客户端。

结果如下

Md1请求
Md2请求
Md2返回
Md1返

 

 

2.使用中间件

想要使用自定义的中间件就要先注册中间件

 MIDDLEWARE = [    ...    'app01.mdws.Md1',    'app01.mdws.Md2']

 

标签:process,中间件,self,request,django,response
From: https://www.cnblogs.com/victor1234/p/16898677.html

相关文章

  • 10.django-cookie&session
    我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,ses......
  • 8.django-message组件
    message组件可以某次请求的某些数据暂存起来,当后面请求需要的时候可以再次使用,同时删除这些存起来的数据相对于cookie,message将数据存在server端,在需要使用的时候,再将数......
  • 中间件与数据库
    一、云数据库的特征云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需付费、高可用性以及存储整合等优势。根据数据库类型一般分为关系型数据......
  • 深入剖析nodejs中间件
    nodejs的出现为前端行业带来了无限的可能性,让很多原来只负责客户端开发的同学也慢慢开始接触和使用服务器端技术.虽然nodejs带来了很多的好处,但是它也存在自身的局限性.......
  • Django Celery RabbitMQ访问被拒绝(403) ACCESS_REFUSED
    报错代码:(403)ACCESS_REFUSED-LoginwasrefusedusingauthenticationmechanismPLAI(省略) 解决方案:    在rabbitmq中注册用户具体代码实现:列出用户rabbitm......
  • 4.django-模板
    在django中,模板引擎(DTL)是一种可以让开发者将服务端数据填充到html页面中的完成渲染的技术模板引擎的原理分为以下三步:在项目配置文件中指定保存模板文件的的模板目录,一......
  • 3.django-视图
    django的视图主要有两种,分别是函数视图和类视图,也就是FBV和CBV,先学习FBV1.请求方式常见的请求方式如下GET:获取数据POST:添加数据DELETE:删除数据PUT:更新数据PATCH局......
  • 1.django简介及安装
    1.简介web应用程序的本质接收并解析HTTP请求处理本次请求,完成业务上的处理构造并返回响应HTTP响应   什么是web框架呢?web框架用于搭建web应用程序,免......
  • 随记:pywebio+django报错“Failed to load resource”,cdn失效
    自己用Django+pywebio搭建的网站一直正常运转,但近期出现了报错“Failedtoloadresource”,链接显示:“http://127.0.0.1:8000/?_pywebio_cdn=False”,经查阅官网资料,应该......
  • 【Django】RBAC权限管理系统模块-理解
    今天文章分为两部分:)PART1 RBAC权限管理内容分享/ PART2关于字节跳动一面  10Minutes Django-RBAC:PART1 这权限管理系统主要功能是什么?顾名思义,在系统中可以灵......