• Django-中间件(切面编程AOP)


    自定义中间件

    官网:中间件 | Django 文档 | Django

    中间件使用多就在主应用创建,仅限于子应用就在子引用中创建中间件文件.py

    之后在settings.py文件中去配置中间件,运行的时候会自动调用中间件

    1. def simple_middleware(get_response):
    2. def middleware(request):
    3. # 业务处理前
    4. response = get_response(request)
    5. # 业务处理后
    6. return response
    7. return middleware
    8. class SimpleMiddleware:
    9. def __init__(self, get_response):
    10. self.get_response = get_response
    11. # One-time configuration and initialization.
    12. def __call__(self, request):
    13. # 业务处理前
    14. response = get_response(request)
    15. # 业务处理后
    16. return response


    process_view函数

    process_view() 只在 Django 调用视图前被调用,它应该返回 None 或 HttpResponse 对象。

    • 返回 None ,Django 将继续处理这个请求,执行任何其他的 process_view() ,然后执行相应的视图
    • 如果它返回 HttpResponse 对象,Django 不会去影响调用相应的视图;它会将响应中间件应用到 HttpResponse 并返回结果。

    process_view(request, view_func, view_args, view_kwargs)

    • request 是一个 HttpRequest对象

    • view_func 是一个 Django 将要使用的 Python 函数。(这是一个真实的函数对象,不是函数的名称)

    • view_args 是一个用来传递给视图的位置参数列表

    • view_kwargs 是一个用来传递给视图的关键字参数字典

      提示

      view_args 和 view_kwargs 都不包含第一个视图参数 ( request )


      中间件的应用场景

    • 网站维护更新,不让用户访问可以使用中间件

    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. # 自定义中间件
    10. 'middle_app.middleware.UpwebMiddle', # 网站维护使用
    11. ]
    1. from django.http import HttpResponse
    2. from django.conf import settings
    3. class UpwebMiddle():
    4. def __init__(self, get_response):
    5. self.get_response = get_response
    6. def __call__(self, request):
    7. if request.path.startswith(settings.WH_URL):
    8. return HttpResponse("维护中无法访问")
    9. response = self.get_response(request)
    10. return response

  • 相关阅读:
    xss标签和属性爆破
    贪心算法 Problem M 1012 已知幂和结果求底数
    异常语法详解
    猿创征文|【.Net实用方法总结】 整理并总结System.IO中FileStream类及其方法介绍
    Python数据结构与算法10
    Java并发编程之ReentrantLock重入锁原理解析
    Spring Boot 整合 Shiro,十分钟,让你知道有多简单
    Springcloud----Sentinel微服务保护
    2311vim极语言加高亮
    [Power Query] 数据的拆分、提取与合并
  • 原文地址:https://blog.csdn.net/weixin_65791897/article/details/143242708