Django“login()只需要1个参数(2给定)”的错误

我正在尝试使用django.contrib.auth.login在会话中存储用户的ID。 但它不是没有预期的工作。

我得到错误login()需要刚好1个参数(2给出)

与login(用户)我得到AttributeError在/login/用户'对象没有属性'方法'

我使用稍微修改的示例formshttp://docs.djangoproject.com/en/dev/topics/auth/ :

from django.shortcuts import render_to_response from django.contrib.auth import authenticate, login def login(request): msg = [] if request.method == 'POST': username = request.POST['u'] password = request.POST['p'] user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user) msg.append("login successful") else: msg.append("disabled account") else: msg.append("invalid login") return render_to_response('login.html', {'errors': msg}) 

login.html没有什么特别之处:

 <html> <head> <title></title> </head> <body> <form action="/login/" method="post"> Login:&nbsp; <input type="text" name="u"> <br/> Password:&nbsp; <input type="password" name="p"> <input type="submit" value="Login"> </form> {% if errors %} <ul> {% for error in errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} </body> </html> 

有没有人有想法如何使login()的工作。

您的视图函数也称为login ,并且对login(request, user)的调用最终被解释为试图recursion调用此函数:

 def login(request): ... login(request, user) 

为了避免它重命名您的视图function或以不同的方式参考从django.contrib.auth login 。 你可以例如改变导入来重命名loginfunction:

 from django.contrib.auth import login as auth_login ... auth_login(request, user) 

一个可能的修复:

 from django.contrib import auth def login(request): # .... auth.login(request, user) # ... 

现在你的视图名称不会覆盖django的视图名称。

其他方式:

 from django.contrib.auth import login as auth_login 

然后调用auth_login(request, user)而不是login(request, user)