189 8069 5689

django之中间件的配置使用-创新互联

首先了解下在django中请求处理的过程:

我们提供的服务有:成都网站制作、网站建设、微信公众号开发、网站优化、网站认证、萧山ssl等。为超过千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的萧山网站制作公司

浏览器发起请求 --》 匹配url成功 --》运行view视图函数 --》 调用html模板 --》返回给浏览器。

面向切面编程:就是在一种开发好的框架,上述过程中,任意箭头位置打断正常流程,加入一些干预的处理环节,从而实现更多功能且不影响原来的框架流程。

根据以上要求,最简单的方法就是修改django的源代码,但这样对一般人来说非常有难度,所以,django在框架设计中,就预留出来了这些处理环节,用户在使用时,根据实际需要选择修改或者不修改即可。

在django中通过提供了一种面向切面编程的工具就叫中间件;实际上中间件就是一个python的类,有固定的6中方法可实现:

(1)_init_:服务器响应第一个请求时调用一次,用于确定是否启用当前中间件;

(2)process_request(request):执行视图前被调用,在每个请求上调用,返回None或HttpResponse对象;

(3)process_view(request, view_func, view_args, view_kwargs):调用视图前被调用,在每个请求上调用,返回None或HttpResponse对象;

(4)process_template_response(request,response):在视图刚好执行完后被调用,在每个请求上调用,返回实现了render方法的响应对象;

(5)process_response(request,response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象;

(6)process_exception(request,response,exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

下面显示各个方法在流程中的位置:

浏览器发起请求 --process-request()--》 匹配url成功 --prcess_view()--》运行view视图函数 --process_template_response()--》 调用html模板 --process_response()--》返回给浏览器。

第一次浏览器发起请求 --》_init_();

运行view视图函数时,出现异常 --》 process_exception --》 process_response --》返回浏览器。

下面演示中间件的配置使用,环境同上篇django文章。

在应用中定义一个python类,实现中间件:

]# cd py3/django-test1/test5
]# vim bookshop/MyException.py
from django.http import HttpResponse
class MyException():
    def process_exception(request,response,exception):
        return HttpResponse(exception)

在settings.py配置文件中注册中间件:

]# vim test5/settings.py
MIDDLEWARE_CLASSES = (
    'bookshop.MyException.MyException',
    ...
)

定义视图,验证中间件应用:

]# vim bookshop/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request,'bookshop/index.html')
def myExp(request):
    return HttpResponse('hello_world')

配置url:

]# vim bookshop/urls.py
from django.conf.urls import url
from .  import views
urlpatterns = [
    url(r'^$',views.index),
    url(r'^myexp$',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 bookshop/views.py
...
def myExp(request):
    a1 = int('abc')
    return HttpResponse('hello_world')

浏览器访问:http://192.168.255.70:8000/myexp

显示:invalid literal for int() with base 10: 'abc'

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


名称栏目:django之中间件的配置使用-创新互联
转载源于:http://cdxtjz.cn/article/dicphh.html

其他资讯