- 中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。比如如果视图函数出错,运行的过程总则会使用中间件调用Exception类,使用process_exception方法,当然这个类和方法要在MyException.py中定义。
- 激活:添加到Django配置文件(setting.py)中的MIDDLEWARE_CLASSES元组中
- 中间件是一个python类,定义好之后可以添加到MIDDLEWARE_CLASSES中,每个类当中可以定义以下方法中的一个或多个:
_init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
process_exception(request,response,exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
from django.http import HttpResponse
class MyException():
def process_exception(request,response,exception):
return HttpResponse('abc')
添加中间件’booktest.MyException.MyException’到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.MyException.MyException'
)
view.py 定义myExp函数
故意设置一个错误语句a1 = int(‘abc’),看浏览器请求异常
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'booktest/index.html')
def myExp(request):
a1 = int('abc')
return HttpResponse('123')
配置url
from django.conf.urls import url
import views
urlpatterns=[
url(r'^$',views.index,name='index'),
url(r'^myExp',views.myExp,name='myExp')
]
结果: