3

我是 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 行中引发了错误:如果 request.user.is_authenticated():

4

2 回答 2

5

您的视图函数被调用login,它需要一个参数,request

在您视图的第 11 行,您调用login(user). 现在,您可能打算将其作为来自 的登录功能django.contrib.auth,并且大概您已经从视图顶部的那里导入了它。但是 Python 一次只能使用一个名称:因此,当您命名 view 时login,它会覆盖对该名称的现有引用。

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

The solution is to either rename your view to something else, or do from django.contrib import auth and call auth.login(user) inside your view.

于 2012-04-11T21:23:30.507 回答
1

login 必须有 2 个参数,request 和 user。如果未给出请求,则登录无法设置 cookie 等。因此,请执行以下操作:

login(request, user)

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

于 2012-04-11T21:13:18.367 回答