2012-04-11 147 views
3

我是django的新手,并且尝试让用户身份验证工作。我已经建立了非常基本的登录表单和视图,但我得到的错误:AttributeError at/accounts/login /'User'对象没有'user'属性

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行:如果request.user.is_authenticated( ):

+1

它涉及什么行?另外,你有没有删除pyc文件,并重新启动服务器? – Marcin 2012-04-11 20:55:28

+0

请添加引发异常的部分 – Willian 2012-04-11 21:11:03

+0

对不起,我刚刚添加了错误行。 @Marcin - 我刚刚尝试删除pyc文件并重新启动服务器,但它没有区别 – 2012-04-11 21:20:36

回答

4

您的视图函数被调用login,它需要一个参数,request。您可以拨打login(user)。现在,您可能意味着要成为django.contrib.auth的登录功能,并且大概您已经从视图的顶部将其导入。但是,Python只能同时使用一个名称:所以当您命名您的视图login时,它会覆盖现有的对该名称的引用。

这样做的结果是该行呼叫您的视图,而不是登录功能。 (这就是为什么你会得到这个特定的错误:你的视图的第一行检查request.user,从通常是请求的第一个参数中取request - 但在你的情况下,你已经通过user作为第一个参数,当然用户本身没有用户参数。)

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

+1

oops,谢谢,noob错误 – 2012-04-11 21:25:54

相关问题