【问题标题】:django profies and request.user - errordjango profies 和 request.user - 错误
【发布时间】:2012-04-24 22:10:17
【问题描述】:

我收到以下错误:

“AnonymousUser”对象没有属性“get_profile”

在我添加了以下中间件之后,尝试在之前没有登录的情况下登录我的网站:

class TimezoneMiddleware(object):
    def process_request(self, request):
        try:
            driver = request.user.get_profile()
            timezone.activate(driver.timezone)
        except ObjectDoesNotExist:
            timezone.activate('UTC')

在traceback中,错误发生在try语句的第一行。

提前感谢您的帮助!

【问题讨论】:

  • 通过'if request.user.is_authenticated():'保护线路
  • 感谢工作。如果您将其作为答案提交,我很高兴将您的答案标记为正确答案。再次感谢

标签: django django-users django-profiles


【解决方案1】:

对于未登录的用户,request.user 是AnonymousUser 实例,其中不包含get_profile。我们可以检查request.user是否已经登录,并通过if request.user.is_authenticated():保护登录用户的逻辑

def process_request(self, request):
    if request.user.is_authenticated(): 
        try:
            driver = request.user.get_profile()
            timezone.activate(driver.timezone)
        except ObjectDoesNotExist:
            timezone.activate('UTC')

【讨论】:

    【解决方案2】:

    request.user.get_profile() 可能会引发 AttributeError,您应该尝试以下操作

    class TimezoneMiddleware(object):
        def process_request(self, request):
            try:
                driver = request.user.get_profile()
                timezone.activate(driver.timezone)
            except ObjectDoesNotExist, AttributeError:
                timezone.activate('UTC')
    

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2011-07-26
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多