如何在Django框架中使用中间件

  介绍

如何在Django框架中使用中间件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强> 1,面向切面编程

<李>

切点(钩子)

<李>

切点允许我们动态的在原有逻辑中插入一部分代码

<李>

在不修改原有代码的情况下,动态注入一部分代码

<李>

默认情况,不中断传播,切点会自动愈合(自动执行原有逻辑)

<李>

如果我们执行了中断操作(返回,提高),没接上,会直接到程序结尾

<李>

五个切面:1,请求交给路由处理之前;2,请求交给视图处理之前;3,请求交给视图渲染后;4、渲染结果返回给模板之前;5,出现异常。

<强> 2,Django中的中间件

<李>

框架内置切点

<李>

init

<李>

没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件

<李>

process_request(自我,请求)

<李>

在执行视图前被调用,每个请求上都会调用

<李>

不返回或返回HttpResponse对象

<李>

process_view(自我、请求、view_func view_args, view_kwargs)

<李>

调用视图之前执行,每个请求都会调用

<李>

不返回或返回HttpResponse对象

<李>

process_template_response(自我、请求、响应)

<李>

在视图刚好执行完后进行调用,每个请求都会调用

<李>

不返回或返回HttpResponse对象

<李>

process_response(自我、请求、响应)

<李>

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

<李>

不返回或返回HttpResponse对象

<李>

process_exception(自我,请求,例外)

<李>

当视图抛出异常时调用

<李>

不返回或返回HttpResponse对象

得到django.http  import  HttpResponse   得到django.shortcuts  import 渲染,重定向   得到django.urls  import 相反   得到django.utils.deprecation  import  MiddlewareMixin   得到MidUpVcode.settings  import  BLACK_LIST VIP_LIST   & # 39;& # 39;& # 39;   所有的钩子函数都可以返回一个响应   一旦钩子函数返回了反应,整个请求的受理就结束了   & # 39;& # 39;& # 39;   #,继承于框架中间件   class  MyappMiddleware (MiddlewareMixin):   ,#中间件的初始化方法,全局执行一次   ,# def  __init__(自我,,get_response=None):   ,#,,超级(MyappMiddleware,,自我). __init__ ()   ,#,,印刷(,,“在的在的在的在的在在在在在在,MyappMiddlware  __init__")   ,#下钩子于所有路由被交给路由表之前   ,def  process_request(自我,,请求):   ,,#,获取客户端IP地址   ,,clientIp =, request.META [& # 39; REMOTE_ADDR& # 39;】   ,,#,请求的路由   ,,url =request.path   ,才能打印(“祝辞祝辞祝辞,process_request",,请求,,clientIp,, url)   ,,#,#,屏蔽黑名单用户   ,,#,只要客户端IP在黑名单中   ,,#,if  clientIp 拷贝BLACK_LIST:   号,,,,,直接渲染fuckoff.html并立刻返回   号,,,,,return 渲染(请求,& # 39;fuckoff.html& # 39;)   ,,#,#,当贵宾用户访问福利页面时提供更多好的服务   ,,#,if  clientIp 拷贝VIP_LIST 以及url==& # 39;/myapp/富力/& # 39;:   号,,,,,return 渲染(请求,,& # 39;fuli.html& # 39;,,背景={& # 39;imgpath # 39;:, & # 39; meinv1.jpg& # 39;})   ,,#,福利页必须登录了才能查看   ,,if  url ==, & # 39;/myapp/富力/& # 39;,以及not  request.session.get (& # 39; uname # 39;,,没有一个):   ,,,,return 重定向(反向(& # 39;myapp:登录# 39;))   ,#下钩子于所有路由请求被交给视图函数之前   ,def  process_view(请求,自我,还以为,view_func, view_args,, view_kwargs):   ,才能打印(“祝辞祝辞祝辞,process_view",,请求,,view_func,, view_args,, view_kwargs)   ,#理论上下钩子于所有路由请求的模板被渲染完成以后   ,#这个函数实测无法回调   ,def  process_template_response(自我,,请求,响应):   ,才能打印(,,“在的在的在的在的在在在在在在,process_template_response",,请求,响应)   ,,return 响应   ,#下钩子于所有路由的响应被返回之前   ,def  process_response(自我,,请求,响应):   ,才能打印(,,“在的在的在的在的在在在在在在,process_response",,请求,响应)   ,,return 响应   ,def  process_exception(自我,,请求,,除外):   ,才能打印(,,“在的在的在的在的在在在在在在,process_exception",,请求,,例外)   ,,return 重定向(& # 39;/& # 39;)

如何在Django框架中使用中间件