繁体   English   中英

/ accounts / login /上的AttributeError'用户'对象没有属性'user'

[英]AttributeError at /accounts/login/ 'User' object has no attribute 'user'

我是django的新手并试图让用户身份验证正常工作。 我已经设置了一个非常基本的登录表单和视图,但我收到错误:

AttributeError at /accounts/login/ 'User' object has no attribute 'user'

我很困惑因为我没有尝试访问User.user
我知道它必须是第一个else语句中的内容,因为经过身份验证的用户只需重定向到“/”
这是观点:

def login(request):
  if request.user.is_authenticated():
    return HttpResponseRedirect("/")
  else:
    if request.method == 'POST':
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(username=username, password=password)
      if user is not None:
        if user.is_active:
          login(user)
          return HttpResponseRedirect("/")
      return HttpResponse("There was an error logging you in")
    else:
      return render_to_response("registration/login.html", 
                                 context_instance=RequestContext(request))

在views.py第15行引发错误:if request.user.is_authenticated():

您的视图函数称为login ,它只需要一个参数request

在视图的第11行中,您调用login(user) 现在,您可能意味着要成为django.contrib.auth的登录函数,并且可能是您从视图顶部导入了它。 但是Python一次只能使用一个名称:所以当你命名你的视图login ,它会覆盖现有的对该名称的引用。

结果就是该行调用了您的视图,而不是登录功能。 (这就是你得到那个特殊错误的原因:你的视图的第一行检查request.user ,从第一个参数获取request ,通常是请求 - 但在你的情况下,你已经将user作为第一个参数传递,并且当然用户本身没有用户参数。)

解决方案是将视图重命名为其他内容,或者from django.contrib import auth重命名并在视图中调用auth.login(user)

login必须有2个参数,request和user。 如果没有给出请求登录,则无法设置cookie等。所以:

login(request, user)

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM