zoukankan      html  css  js  c++  java
  • 中间件的应用

    流程

    客户端发起请求 –> 进到wsgi(模型) –> 中间件(request_process) –> 路由(urls.py) –> 中间件(view_process) –> view(视图操作 -> orm操作 -> mysql ) –> 中间件(process_response before_template) –> wsgi(模型)

    在Python项目中一直都在有使用中间件,在django项目中的setting.py文件中看到MIDDLEWARE配置项

    1
    2
    #加载自定义中间件   文件夹名.文件名.类名
    'myapp.md_user.MyMiddleware'

    导入

    1
    from django.utils.deprecation import MiddlewareMixin

    中间件的四种方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 自定义中间件
    class MyMiddleware(MiddlewareMixin):
    # 请求之前
    def process_request(self,request):
    print("过滤中间件")
    # 获取路由
    if request.path_info.startswith("/login"):
    return HttpResponse(json.dumps({'msg':'您篡改了id'},ensure_ascii=False,indent=4),
    content_type='application/json')
    # 进入视图之前
    def process_view(self,request,view_func,view_args,view_kwargs):
    # request是httprequest对象。

    # view_func是即将使用的视图函数,它是实际的函数对象,而不是函数的名称作为字符串。

    # view_args是将传递给视图位置的参数的列表。

    # view_kargs是将传递给视图的关键字参数的字典。

    # view_args和view_kargs都不包含第一个视图参数(request)
    # 异常捕获方法
    def process_exception(self,request,exception):
    pass
    # 返回之前
    def process_response(self,request,response):
    return response

    ​ 1.中间件的process_request方法是在执行视图函数之前执行的

    ​ 2.当配置中间件时,会按照MIDDLEWARE的注册顺序,也就是列表的索引值,从前到后依次执行的。

    ​ 3.不同中间件之间传递的request都是同一个对象。

    中间件的应用场景

    1.做IP限制 –> 放在中间件类的列表中,阻止某些ip访问;

    2.URL访问过滤 –> 如果用户访问的是logo视图(放过)如果访问其他视图,需要检测是否已经有session或localstrage,已经有了放行,如果没有返回login,这样就省的在多个视图函数上写装饰器了!

  • 相关阅读:
    CSS
    Html5
    [LeetCode] 78. Subsets(子集)
    [LeetCode] 22. Generate Parentheses(括号生成器)
    [LeetCode] 406. Queue Reconstruction by Height(按身高重排队列)
    [LeetCode] 46. Permutations(全排列)
    [LeetCode] 94. Binary Tree Inorder Traversal(二叉树的中序遍历)
    [LeetCode] 338. Counting Bits(数比特位)
    [LeetCode] 763. Partition Labels(标签划分)
    [LeetCode] 20. Valid Parentheses(有效的括号)
  • 原文地址:https://www.cnblogs.com/anle123/p/13365507.html
Copyright © 2011-2022 走看看