文章目录
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理对程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
中间件的定义:定义一个中间件工厂函数,然后返回一个可以被调用的中间件。中间件工厂函数需要接收一个可以调用的get_response对象。返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。
我们可以使用中间件,在Diango处理视图的不同阶段对输入或输出进行干预。setting.py 中的 MIDDLEWARE 是中间件信息
建立中间件文件 middleware/middleware.py (类似装饰器)
python
def simple_middleware(get_response):
def middleware(request):
print('before request')
# 响应前
response = get_response(request)
# 响应后
print('after request')
return response
return middleware
在setting.py 中的 MIDDLEWARE 中加入如下内容
python
# 中间件
MIDDLEWARE = [
# ...
'ProjectName.middleware.simple_middleware', # 添加这行
]
让后访问触发view函数,终端就会打印
before request和after request
实例:可以用中间件来判断每次请求是否携带了cookie中的某些信息,通常如果不使用中间件,需要在每个函数中都添加判断的代码
不使用中间件写法如下(每个函数都要加cookie判断)
python
from django.views import View
from django.contrib.auth.mixins import LoginRequiredMixin
class CenterView(LoginRequiredMixin, View):
def get(self, request):
username = request.COOKIES.get('username')
if username is None: # 添加判断
print('username is None')
return HttpResponse('没有登入')
return HttpResponse('个人中心展示')
def post(self, request):
username = request.COOKIES.get('username')
if username is None: # 添加判断
print('username is None')
return HttpResponse('没有登入')
return HttpResponse('个人中心信息修改')
中间件写法:可以利用中间件,在中间件中加入cookies检测,views视图中就可以不用使用检测
python
def simple_middleware(get_response):
def middleware(request):
# 添加判断
username = request.COOKIES.get('username')
if username is None:
print('username is None')
return HttpResponse('没有登入')
response = get_response(request)
return response
return middleware
python
from django.views import View
from django.contrib.auth.mixins import LoginRequiredMixin
class CenterView(LoginRequiredMixin, View):
def get(self, request):
return HttpResponse('个人中心展示')
def post(self, request):
return HttpResponse('个人中心信息修改')
多个中间件顺序:请求前的执行顺序是按照注册的顺序从上往下(settings.py中),响应后的顺序是从下往上(注册的反顺序)