一尘不染

Django:WSGIRequest'对象在某些页面上没有属性'user'?

django

如果用户未登录,我想设置一个cookie。

My中间件:

class UserStatus(object):
    def process_response(self,request,response):
        user_status = 1 if request.user.is_authenticated() else 0
        max_age = (20)*52*7*24*60*60 # 20 years (After expiry, cookie gets deleted)
        response.set_cookie(user_status_cookie,user_status,max_age)
        return response

最后添加到MIDDLEWARE_CLASSESsettings.py中。

问题:

  • 错误:“ WSGIRequest”对象没有属性“ user”
  • 为什么,当我已经激活身份验证和会话中间件时?
  • 另外,有些页面在出现此错误的地方工作流畅。
  • 我究竟做错了什么 ?

阅读 562

收藏
2020-04-03

共2个答案

一尘不染

根据FineManual:

在响应阶段(process_response()和process_exception()中间件)中,从下到上以相反的顺序应用这些类。

因此,我想你最好在auth和会话中间件之前添加你的中间件(假设它仅处理响应)。

话虽这么说,我对你仅在某些页面上有错误这一事实感到有些困惑?

2020-04-03
一尘不染

最近遇到了同样的问题,发现访问URL时不带斜杠,并且APPEND_SLASH设置设为true时,就会发生这种情况:

Django处理初始请求

  • CommonMiddleware.process_request
  • 重定向到带有反斜杠的newurl
  • process_response仍在定制中间件中运行
  • request.user不存在
  • HTTP 301

  • Django然后使用斜杠末尾处理url的请求

  • process_response在自定义中间件中运行

  • request.user现在存在

任何人都知道为什么永久重定向后在process_response中无法访问某些主要属性(用户和会话)?

2020-04-03