一、Django请求的“奇幻漂流”
想象一下,一个HTTP请求,就像是一个想去你Django应用这个“夜店”玩耍的客人。
- 客人(请求) 到了夜店门口。
- 保安队长(WSGI Server) 接了他,然后把他交给了内部领班(Django)。
- 领班 没有直接带他去卡座(View),而是让他必须穿过一条长长的、有多个服务站的走廊。
这条走廊,就是我们的中间件栈(Middleware Stack)!
在这条走廊上,每个服务站(中间件)都可以对客人做点事情:
- 第一个服务站(SecurityMiddleware):检查客人身上有没有带违禁品(安全检测)。
- 第二个服务站(SessionMiddleware):发给他一个独一无二的手环(Session ID),凭这个手环可以认人。
- 第三个服务站(CommonMiddleware):看看他的着装是否得体(APPEND_SLASH 等通用处理)。
- 第四个服务站(CsrfViewMiddleware):让他对个暗号,防止他是竞争对手派来捣乱的(CSRF保护)。
……经过一系列服务站后,客人终于见到了卡座的主人(View),开始嗨皮(执行业务逻辑)。
嗨皮完了,客人要回家(返回响应),他还得原路返回,再经过这条走廊。这时候,每个服务站又可以对他“指手画脚”一下,比如往他的包里塞张优惠券(修改响应内容),或者记下他今晚消费了多少(记录日志)。
这个“请求来时”和“响应走时”都能插一脚的走廊服务站,就是Django中间件! 它强大就强大在,它能全局性地、无侵入地影响整个Django应用的处理流程。
二、解剖一个中间件:它到底长啥样?
一个自定义中间件,本质上就是一个Python类,里面定义了那么一两个到五个像魔法一样的方法。Django会在特定的时机去调用它们。
最最最常用的两个方法是:
process_request(self, request)
-
- 时机:请求刚进来,还没路由到视图之前。
- 作用:你可以在这里“盘问”请求。比如检查用户是否登录、检查IP是否在黑名单。
- 返回值:
-
<

最低0.47元/天 解锁文章
1263

被折叠的 条评论
为什么被折叠?



