自定义中间件
创建一个mymiddleware.py
def simple_middleware(get_response):
# 中间件工厂, 生成一个中间件
# get_response
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
# print('1,初始化中间件了....')
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
print('1.处理request前')
request.abc = 123
try:
response = get_response(request)
except:
pass
print('1.处理request后, 拿到了response')
response.status_code = 222
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
def simple_middleware2(get_response):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
print('2.初始化中间了....')
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
print('2.处理request前')
response = get_response(request)
print('2.处理request后, 拿到了response')
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
注册到 Settings.py
MIDDLEWARE = [
'app1.mymiddleware.simple_middleware',
'app1.mymiddleware.simple_middleware2',
]
到视图view写
def my_decorator(func):
def wrapper(request, *args, **kwargs):
print('自定义装饰器被调用了')
print('请求路径%s' % request.path)
return func(request, *args, **kwargs)
return wrapper
# @method_decorator(my_decorator, name='get') # 正常
# @method_decorator(my_decorator, name='dispatch') # 正常, 也可以给 view 方法加装饰器
# @method_decorator(my_decorator) # 错误
class IndexView(View):
def get(self, request):
# 处理get请求
print(request.user)
print('======',request.abc)
return HttpResponse('类视图, 处理get请求')
def post(self, request):
return HttpResponse('类视图, 处理post请求')
def put(self, request):
return HttpResponse('类视图, 处理put请求')
def delete(self, request):
return HttpResponse('类视图, 处理delete请求')