##Django中间件看完这篇彻底明白( 三 )


检查是否需要添加/ , 主要是根据settings中APPEND_SLASH配置ifself.should_redirect_with_slash(request): path=self.get_full_path_with_slash(request) else: path=request.get_full_path()
在process_response函数中 , 会判断是否需要把404的请求重新定向到我们需要的页面django.middleware.csrf.CsrfViewMiddleware 这个很明显就是我们Django框架的csrf验证了 , 主要是process_view中的处理 , 从函数处理我们可以看到以下几点:
request请求中包含csrf_processing_done属性 , 则不进行csrf验证
视图函数中包含csrf_exempt属性 , 则不进行csrf验证
如果是GET、HEAD、OPTIONS、TRACE请求 , 则不进行csrf验证
request请求中包含_dont_enforce_csrf_checks属性 , 则不进行csrf验证
https请求头中如果不包含HTTP_REFERER , 则拒绝访问
请求头中不包含CSRF_COOKIE , 则拒绝访问
POST请求中携带csrfmiddlewaretoken参数 , 如果验证通过就可以访问
PUT/DELETE请求头中携带CSRF_HEADER_NAME配置 , 如果验证通过就可以访问
django.contrib.auth.middleware.AuthenticationMiddleware这个中间件中为我们的request对象添加了user属性 , 主要是获取session中SESSION_KEY值(settings配置中) , 从用户表中查询对应主键 , 得到用户对象 , 将其付给request.user
django.contrib.messages.middleware.MessageMiddlewareDjango的消息框架 , 主要是向目标中推送消息内容 , 在前端可通过以下方式使用{%ifmessages%}
{%formessageinmessages%}
{%ifmesage.level==DEFAULT_MESSAGE_LEVELS.ERROR%}Important:{%endif%} {{message}}
{%endfor%}
{%endif%}


推荐阅读