介绍
如何在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框架中使用中间件