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: <input type="text" name="u"> <br/> Password: <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)
。