django中间件
2018-06-09 00:22:18 11 举报
AI智能生成
django中间件
作者其他创作
大纲/内容
_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对象
在MIDDLEWARE_CLASSES注册
注册内容hello_django.middleware.Middle
法一
去调用那6种方法
法二
response = self.get_response(request)
request到达view之前执行的代码
response到达用户浏览器之前执行的代码
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
# 第一种方式
class MyException(MiddlewareMixin):
def process_exception(self,request,exception):
return HttpResponse(exception)
# 第二种方式
from ts22.models import UserModel
class UserMiddleware(MiddlewareMixin):
def __init(self,get_response):
self.get_response = get_response
def __call__(self, request):
# request到达view之前执行的代码
username = request.session.get('username','未登入')
user = UserModel.objects.filter(username=username).first()
if user and not hasattr(request, 'myuser'):
setattr(request, 'myuser', user)
# 给request设置一个新的属性,调用这个属性返回user
else:
setattr(request, 'myuser', '游客')
response = self.get_response(request)
# response到达用户浏览器之前执行的代码
return response
from django.utils.deprecation import MiddlewareMixin
# 第一种方式
class MyException(MiddlewareMixin):
def process_exception(self,request,exception):
return HttpResponse(exception)
# 第二种方式
from ts22.models import UserModel
class UserMiddleware(MiddlewareMixin):
def __init(self,get_response):
self.get_response = get_response
def __call__(self, request):
# request到达view之前执行的代码
username = request.session.get('username','未登入')
user = UserModel.objects.filter(username=username).first()
if user and not hasattr(request, 'myuser'):
setattr(request, 'myuser', user)
# 给request设置一个新的属性,调用这个属性返回user
else:
setattr(request, 'myuser', '游客')
response = self.get_response(request)
# response到达用户浏览器之前执行的代码
return response
0 条评论
下一页
为你推荐
查看更多