zoukankan      html  css  js  c++  java
  • Django中间件

    一、Django中间件简介

      官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变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',
    ]

    1.1 自定义中间件

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

        网站全局校验:如果用户没有登录,网站里都不能访问

      中间件可以定义五个方法,分别是:(主要的是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

  • 相关阅读:
    [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数
    资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。
    运维实战案例之“Too many open files”错误与解决方法
    too many open files问题详解
    head tail diff -c fff hhh 前5行 后5行 区别 动态显示文本最新信息: $tail -f crawler.log
    jQuery 1.x和jQuery 2.x的最大差别
    实战:自己定义脚本关闭mysql-mysql 5.6.19
    AudioQueue(AudioToolBox)的原理与使用
    quartz2D 图片剪切
    Oracle ODI 11g 安装与技术开发文档
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/11465626.html
Copyright © 2011-2022 走看看