【问题标题】:Django AttributeError: 'WSGIRequest' object has no attribute 'user'Django AttributeError:“WSGIRequest”对象没有属性“用户”
【发布时间】:2016-02-02 15:47:30
【问题描述】:

将 Django 1.4 升级到 1.5 后出现问题
当我有设置时:
调试 = 假
所以代码:

def get_cart(request):
    """
    Returns cart for user or None if cart does not exist,
    means that user didn't add item to it.
    """
    shop_cart = None
    if request.user.is_authenticated():
        try:
            shop_cart = ShoppingCart.objects.get(customer=request.user)
        except ShoppingCart.DoesNotExist:
            pass
    else:
        cart_id = request.session.get('cart_id', None)
        try:
            shop_cart = ShoppingCart.objects.get(pk=cart_id)
        except ShoppingCart.DoesNotExist:
            pass
    return shop_cart

给我错误:
AttributeError: 'WSGIRequest' 对象没有属性 'user'
但是当我设置
调试 = 真
所以一切正常

你知道有人在哪里有问题,为什么在生产模式下它会给我错误?

谢谢

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.http.ConditionalGetMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.request',
    'eshopwisepress.wp_core.context_processors.request_absolute_path',
    'eshopwisepress.wp_core.context_processors.domain',
)

【问题讨论】:

    标签: python django authentication


    【解决方案1】:

    你需要改变你的中间件顺序

    'django.contrib.auth.middleware.AuthenticationMiddleware'
    'django.contrib.sessions.middleware.SessionMiddleware',
    

    【讨论】:

    • 我更改了订单但同样的错误。当我有 DEBUG=True 所以应用程序给我错误:Django 身份验证中间件需要安装会话中间件。
    • @MartinJablečník 你能把你的TEMPLATE_CONTEXT_PROCESSORS
    • 这是错误的。 Django 身份验证中间件需要安装会话中间件。会话中间件必须在认证中间件之前
    【解决方案2】:

    升级到 Django 1.5 后我们遇到了类似的问题。 在我们的例子中,虽然我们从未在设置文件中设置 ALLOWED_HOSTS。根据Django 1.5 documentation,测试只会在 DEBUG=False 时执行,因此在我们的开发环境中永远不会触发错误。一旦设置,错误就消失了。

    【讨论】:

      【解决方案3】:

      只需将您的上下文处理器放在try...except 块中:

      try:
          # your context processor logic
      except:
          return {}
      

      它可能会在某些页面上失败,但会在其他页面中通过...它是不是很hacky,是的,但它不会让您的网站崩溃

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 2021-04-30
        • 2022-01-21
        • 2018-09-06
        • 1970-01-01
        • 2011-03-15
        • 2021-12-13
        相关资源
        最近更新 更多