我正在尝试使用django.contrib.auth.login将用户的ID存储在会话中.但它没有按预期工作.
我收到错误login()只需要1个参数(给定2个)
使用login(用户)我在/ login/User获取AttributeError对象没有属性'method'
我正在使用稍微修改过的示例表单http://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})
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何使login()工作.
sth*_*sth 235
您的视图函数也被调用login,并且调用login(request, user)最终被解释为尝试递归调用此函数:
def login(request):
...
login(request, user)
Run Code Online (Sandbox Code Playgroud)
为了避免它重命名您的视图函数或以某种不同的方式引用loginfrom django.contrib.auth.例如,您可以更改导入以重命名登录功能:
from django.contrib.auth import login as auth_login
...
auth_login(request, user)
Run Code Online (Sandbox Code Playgroud)
ars*_*ars 16
一个可能的解决方
from django.contrib import auth
def login(request):
# ....
auth.login(request, user)
# ...
Run Code Online (Sandbox Code Playgroud)
现在,您的视图名称不会覆盖django的视图名称.
小智 9
其他方式:
from django.contrib.auth import login as auth_login
Run Code Online (Sandbox Code Playgroud)
然后打电话auth_login(request, user)而不是login(request, user).
| 归档时间: |
|
| 查看次数: |
38326 次 |
| 最近记录: |