我是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():
答案 0 :(得分:5)
您的视图功能称为login
,它只需一个参数request
。
在您的观点的第11行,您致电login(user)
。现在,您可能意味着要成为django.contrib.auth
的登录函数,并且可能是您从视图顶部导入了它。但是Python一次只能使用一个名称:所以当你命名你的视图login
时,它会覆盖现有的对该名称的引用。
这一行的结果是该行调用您的视图,而不是登录功能。 (这就是你得到那个特定错误的原因:视图的第一行检查request.user
,从第一个参数(通常是请求)中取request
- 但在你的情况下,你已经通过{ {1}}作为第一个参数,当然用户本身没有用户参数。)
解决方案是将您的视图重命名为其他内容,或者user
并在视图中调用from django.contrib import auth
。
答案 1 :(得分:1)
登录必须有2个参数,request和user。如果请求没有给出,则登录无法设置cookie等。所以:
login(request, user)
https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login