阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

高阶应用-中间件

180次阅读
没有评论

共计 1555 个字符,预计需要花费 4 分钟才能阅读完成。

一、说明

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

二、本质

一个 Python 类

三、中间件应用场景

  • 白名单 / 黑名单

    通过访问者用户或者 IP 优先通过或者拒绝一些用户的访问

  • URL 访问过滤

    如果用户访问的是 lsogin 视图(s 放过)

    如果访问其他视图(需要检测是不是有 session 已 dzfr 经有了放行,没有返回 login),这样就省得在 多个视图函数上写装饰器了

  • 缓存

    客户端请求来了,中间件去缓存看看有没有数据,有直接返回给用户,没有再去逻辑层 执行视图函数

四、方法

  • __init__

    不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件

  • process_request(self,request)

    在执行视图之前被调用(分配 url 匹配视图之前),每个请求上都会调用,返回 None 或者 HttpResponse 对象

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

  • process_view(self,request,view_func,view_args,view_kwargs)

    调用视图之前执行,每个请求都会调用,返回 None 或者 HttpResponse 对象

    参数说明

    • request 是 HttpRequest 对象。
    • view_func 是 Django 即将使用的视图函数(它是实际的函数对象,而不是函数的名称作为字符串)
    • view_args 是将传递给视图的位置参数的列表
    • view_kwargs 是将传递给视图的关键字参数的字典
    • view_args 和 view_kwargs 都不包含第一个视图参数(request)
  • process_template_response(self,request,response)

    在视图刚好执行完后调用,每个请求都会调用,返回 None 或者 HttpResponse 对象

  • process_response(self,request,response)

    所有响应返回浏览器之前调用,每个请求都会调用,返回 HttpResponse 对象

  • process_exception(self,request,exception)

    当视图抛出异常时调用,返回 HttpResponse 对象

五、图解

高阶应用 - 中间件

六、自定义中间件

  • App 同级 -> 创建工程目录 middleware

    |-App
    |-middleware
    |–myMiddle.py
    |-project

  • 在 middleware 里 创建一个 python 文件 myMiddle.py

    from django.utils.deprecation import MiddlewareMixin class MyMiddle(MiddlewareMixin): def process_request(self, request): print("get 参数为:", request.GET.get("arg")) print("请求方法", request.method) #HTTP_USER_AGENT if request.META['REMOTE_ADDR'] == '127.0.0.1': return HttpResponse('抱歉 您不能进行访问') def process_exception(self,request,exception): print(str(exception)) return redirect('/') # 如果出现异常去首页
  • 使用自定义中间件

    配置 settings.py 文件

    MIDDLEWARE 中添加

    'middleware.myMiddle.MyMiddle'

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计1555字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中