前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 中间件 请求前

Django 中间件 请求前

作者头像
py3study
发布2020-01-17 11:27:10
2480
发布2020-01-17 11:27:10
举报
文章被收录于专栏:python3

中间件:

代码语言:javascript
复制
class TestMiddleware(object):
    """中间件类"""
    def __init__(self):
        """服务器重启之后,接收第一个请求时调用"""
        pass
    
    def process_request(self, request):
        """产生request对象之后,url匹配之前调用"""
        pass
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """url匹配之后,视图函数调用之前调用"""
        pass
    
    def process_exception(self, request, exception):
        """视图函数发生异常时调用"""
        pass
    
    def process_response(self, request, response):
        """视图函数调用之后,内容返回浏览器之前调用"""
        return response

正常调用顺序是从上往下,但如注册了多个中间件类中包含 process_exception函数的时候,process_exception函数调用的顺序跟注册的顺序是相反的,下面两张图说明:

流程图:

注意:process_response之前的中间件如无返回,则默认返回 None,会继续执行下一个中间件,但如有返回,则直接跳到 process_response中间件

例子:

1.

在app内新建一个 middleware.py 文件

2.

代码语言:javascript
复制
from django.http import HttpResponse

class BlacklistIPSMiddleware(object):
    """中间件类"""
    EXCLUDE_IPS = ['192.168.1.1']
    
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        """视图函数调用之前会调用"""
        user_ip = request.META['REMOTE_ADDR'] # 获取访问用户的IP
        if user_ip in BlacklistIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse('您在黑名单中')

3.

在settings配置文件中注册中间件类

# 'app名.中间件文件名.中间件类名'

MIDDLEWARE_CLASSES = (...,

              ...,

             ‘book.middleware.BlacklistIPSMiddleware’)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档