加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Django 中间件 请求前

发布时间:2020-12-15 17:18:22 所属栏目:大数据 来源:网络整理
导读:中间件: span style="color: #0000ff;"gt;def/spanspan style="color: #000000;"gt; process_request(self,request): /spanspan style="color: #800000;"gt;"""/spanspan style="color: #800000;"gt;产生request对象之后,url匹配之前调用/spanspan style="

中间件:

<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; process_request(self,request):
    </span><span style="color: #800000;"&gt;"""</span><span style="color: #800000;"&gt;产生request对象之后,url匹配之前调用</span><span style="color: #800000;"&gt;"""</span>
    <span style="color: #0000ff;"&gt;pass</span>

<span style="color: #0000ff;"&gt;def</span> process_view(self,request,view_func,*view_args,**<span style="color: #000000;"&gt;view_kwargs):
    </span><span style="color: #800000;"&gt;"""</span><span style="color: #800000;"&gt;url匹配之后,视图函数调用之前调用</span><span style="color: #800000;"&gt;"""</span>
    <span style="color: #0000ff;"&gt;pass</span>

<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; process_exception(self,exception):
    </span><span style="color: #800000;"&gt;"""</span><span style="color: #800000;"&gt;视图函数发生异常时调用</span><span style="color: #800000;"&gt;"""</span>
    <span style="color: #0000ff;"&gt;pass</span>

<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; process_response(self,response):
    </span><span style="color: #800000;"&gt;"""</span><span style="color: #800000;"&gt;视图函数调用之后,内容返回浏览器之前调用</span><span style="color: #800000;"&gt;"""</span>
    <span style="color: #0000ff;"&gt;return</span> response</pre>

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

流程图:

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

例子:

1.

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

2.

django.http <span style="color: #0000ff;">class<span style="color: #000000;"> BlacklistIPSMiddleware(object):
<span style="color: #800000;">"""<span style="color: #800000;">中间件类<span style="color: #800000;">"""<span style="color: #000000;">
EXCLUDE_IPS = [<span style="color: #800000;">'<span style="color: #800000;">192.168.1.1<span style="color: #800000;">'<span style="color: #000000;">]

</span><span style="color: #0000ff;"&gt;def</span> process_view(self,**<span style="color: #000000;"&gt;view_kwargs):
    </span><span style="color: #800000;"&gt;"""</span><span style="color: #800000;"&gt;视图函数调用之前会调用</span><span style="color: #800000;"&gt;"""</span><span style="color: #000000;"&gt;
    user_ip </span>= request.META[<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;REMOTE_ADDR</span><span style="color: #800000;"&gt;'</span>] <span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 获取访问用户的IP</span>
    <span style="color: #0000ff;"&gt;if</span> user_ip <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; BlacklistIPSMiddleware.EXCLUDE_IPS:
        </span><span style="color: #0000ff;"&gt;return</span> HttpResponse(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;您在黑名单中</span><span style="color: #800000;"&gt;'</span>)</pre>

3.

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

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

MIDDLEWARE_CLASSES?= (...,

              ...,

             ‘book.middleware.BlacklistIPSMiddleware’)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读