温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Django框架中间件定义与使用方法案例分析

发布时间:2020-09-27 20:27:31 来源:脚本之家 阅读:178 作者:ITxiaoke 栏目:开发技术

本文实例讲述了Django框架中间件定义与使用方法。分享给大家供大家参考,具体如下:

1. 定义

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。

2. 各个方法

Django在中间件中预置了五个方法,这五个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

1)初始化:无需任何参数, 服务器接收第一个请求时会被调用一次,而且只调用一次,用于确定是否启用当前中间件。

 def init(): pass 

2)在进行url匹配之前被调用,在每个请求上调用,返回None或HttpResponse对象。

 def process_request(request): pass 

3)在url匹配之后,视图函数调用之前被调用,在每个请求上调用,返回None或HttpResponse对象。

 def process_view(request, view_func, view_args, view_kwargs): pass 

4) 视图函数之后会被调用:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。

 def process_response(request, response): pass 

5)异常处理:当视图函数抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

 def process_exception(request,exception): pass 

3. 案例加以说明

1)在booktest/目录下创建middleware.py文件,代码如下:

 from django.http import HttpResponse from django.conf import settings class MyMiddleWare(object): def __init__(self): print("init") def process_request(self,request): print("prcess_request") def process_view(self,request,view_func,*view_args,**view_kwargs): print("process_view") def process_response(self,request,response): print("process_response") return response def process_exception(self,request,exception): print("exception") 

2)在test05/settings.py文件中,向MIDDLEWARE_CLASSES项中注册。

 MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'booktest.middleware.MyMiddleWare', ) 

3)修改booktest/views.py中视图index。

 # 首页的视图函数 def index(request): print("index") return render(request,'booktest/index.html') 

4)运行服务器,命令行中效果如下图:

Django框架中间件定义与使用方法案例分析

5)刷新页面,命令行中效果如下图:

Django框架中间件定义与使用方法案例分析

6)异常中间件效果:

+如果多个中间件中注册了相同的方法,则先注册的后执行。

修改视图函数如下:

 # 首页的视图函数 def index(request): print("index") raise Exception("value error") return render(request,'booktest/index.html') 

效果图如下:

Django框架中间件定义与使用方法案例分析

4. Github代码地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI