我是 django 的新手,正在尝试让用户身份验证工作。我已经设置了一个非常基本的登录表单并查看,但出现错误:
AttributeError at /accounts/login/ 'User' object has no attribute 'user'
我很困惑,因为我没有尝试访问 User.user
我知道它必须是第一个 else 语句中的内容,因为经过身份验证的用户只是重定向到“/”,因为它应该
这是 View :
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():
最佳答案
您的 View 函数称为 login
,它只有一个参数 request
。
在您的 View 的第 11 行中,您调用了 login(user)
。现在,您的意思可能是 django.contrib.auth
中的登录函数,并且您可能已经从 View 顶部的那里导入了它。但是 Python 一次只能让一件事使用名称:因此当您将 View 命名为 login
时,它会覆盖对该名称的现有引用。
这样做的结果是该行调用您的 View ,而不是登录函数。 (这就是为什么你会得到那个特定的错误:你的 View 的第一行检查 request.user
,从通常是请求的第一个参数中获取 request
- 但在你的情况,你已经将 user
作为第一个参数传递,当然 user 本身没有 user 参数。)
解决方案是将您的 View 重命名为其他名称,或者执行 from django.contrib import auth
并在您的 View 中调用 auth.login(user)
。
关于python - AttributeError at/accounts/login/'User' 对象没有属性 'user',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113804/