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
<br>from django.utils.deprecation import MiddlewareMixin
<br>
<br># 第一种方式
<br>class MyException(MiddlewareMixin):
<br> def process_exception(self,request,exception):
<br> return HttpResponse(exception)
<br>
<br># 第二种方式
<br>from ts22.models import UserModel
<br>class UserMiddleware(MiddlewareMixin):
<br> def __init(self,get_response):
<br> self.get_response = get_response
<br>
<br> def __call__(self, request):
<br> # request到达view之前执行的代码
<br> username = request.session.get('username','未登入')
<br> user = UserModel.objects.filter(username=username).first()
<br> if user and not hasattr(request, 'myuser'):
<br> setattr(request, 'myuser', user)
<br> # 给request设置一个新的属性,调用这个属性返回user
<br> else:
<br> setattr(request, 'myuser', '游客')
<br> response = self.get_response(request)
<br> # response到达用户浏览器之前执行的代码
<br> return response
0 条评论
下一页