首先了解下在django中请求处理的过程:
浏览器发起请求——》匹配url成功——》运行观点视图函数——》调用html模板——》返回给浏览器。
面向切面编程:就是在一种开发好的框架,上述过程中,任意箭头位置打断正常流程,加入一些干预的处理环节,从而实现更多功能且不影响原来的框架流程。
根据以上要求,最简单的方法就是修改django的源代码,但这样对一般人来说非常有难度,所以,django在框架设计中,就预留出来了这些处理环节,用户在使用时,根据实际需要选择修改或者不修改即可。
在django中通过提供了一种面向切面编程的工具就叫中间件;实际上中间件就是一个python的类,有固定的6中方法可实现:
(1) _init_:服务器响应第一个请求时调用一次,用于确定是否启用当前中间件;
(2) process_request(请求):执行视图前被调用,在每个请求上调用,返回没有或HttpResponse对象,
(3) process_view(请求、view_func view_args view_kwargs):调用视图前被调用,在每个请求上调用,返回没有或HttpResponse对象,
(4) process_template_response(请求、响应):在视图刚好执行完后被调用,在每个请求上调用,返回实现了渲染方法的响应对象,
(5) process_response(请求、响应):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象,
(6) process_exception(请求、响应异常):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。
下面显示各个方法在流程中的位置:
浏览器发起请求——流程请求()——》匹配url成功,prcess_view()——》运行观点视图函数——process_template_response()——》调用html模板——process_response()——》返回给浏览器。
第一次浏览器发起请求——》_init_ ();
运行观点视图函数时,出现异常——》process_exception——》process_response——》返回浏览器。
下面演示中间件的配置使用,环境同上篇django文章。
在应用中定义一个python类,实现中间件:
)#,cd py3/django-test1/test5 )#,vim 书店/MyException。py
)#,vim test5/设置。py
)#,vim 书店/views.py 得到django.shortcuts import 渲染 得到django.http import  HttpResponse #,Create your  views 这里。 def 指数(请求): ,,,return 渲染(请求,& # 39;书店/index . html # 39;) def myExp(请求): ,,,return HttpResponse (& # 39; hello_world # 39;)
配置url:
)#,vim 书店/urls . py 得到django.conf.urls import url 得到只import 视图 urlpatterns =, ( ,,,url (" # 39; ^ $ & # 39;, views.index), ,,,url (" # 39; ^ myexp $ & # 39;, views.myExp), )
启动django服务:
)#,cd py3/django-test1/test5 )#,python manage.py  runserver 192.168.255.70:8000
浏览器访问:http://192.168.255.70:8000 myexp
显示:hello_world
在视图中,设置一个异常代码:
)#,vim 书店/views.py … def myExp(请求): ,,,a1 =, int (& # 39; abc # 39;) ,,,return HttpResponse (& # 39; hello_world # 39;)
浏览器访问:http://192.168.255.70:8000 myexp
显示:无效的文字与基地10:int () & # 39; abc # 39;