Django - 用户身份验证错误 (django.contrib.auth)
Django - user authentification error (django.contrib.auth)
在 this tutorial 之后,我创建了一个简单的登录页面。但是当我提交登录信息时,出现Python中的异常:
Traceback (most recent call last):
File "/home/jirka/miniconda3/envs/molinf/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/jirka/miniconda3/envs/molinf/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/jirka/molinf/02-database/moldb/views.py", line 100, in login
login(user)
File "/home/jirka/molinf/02-database/moldb/views.py", line 94, in login
if request.POST:
AttributeError: 'User' object has no attribute 'POST'
这是我的代码:
URL 在 urls.py
中:
url(r'^login$', moldb.views.login, name='login')
views.py
中的登录视图:
def login(request):
print(request, type(request))
logout(request)
if request.POST:
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
login(user)
return HttpResponseRedirect('/')
return render(request, "login.html")
login.html
中的登录表单:
<form class="form-horizontal" name="LoginForm" action="{% url 'login' %}" method="post">
{% csrf_token %}
{% if next %}
<input type="hidden" name="next" value="{{ next }}" />
{% endif %}
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" id="username" name="username" placeholder="Username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" name="password" id="password" placeholder="Password">
</div>
</div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn">Login</button>
</div>
</div>
</form>
我发现 views.py
中 print(request, type(request))
的输出在提交表单后如下:
<WSGIRequest: POST '/login'> <class 'django.core.handlers.wsgi.WSGIRequest'>
hanicka <class 'django.contrib.auth.models.User'>
hanicka
是经过身份验证的用户的用户名(我通过登录表单发送的用户名)。 很明显异常是从这里来的,但是这个视图怎么执行了两次,User
模型怎么来的?!
我不熟悉 Django,我缺少一些上下文,但只要看看你的代码、你遵循的示例和 Django 文档,我很好奇如果你选择不同的 login
函数为:
def login_user(request):
以防出现命名冲突...
在 this tutorial 之后,我创建了一个简单的登录页面。但是当我提交登录信息时,出现Python中的异常:
Traceback (most recent call last):
File "/home/jirka/miniconda3/envs/molinf/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/jirka/miniconda3/envs/molinf/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/jirka/molinf/02-database/moldb/views.py", line 100, in login
login(user)
File "/home/jirka/molinf/02-database/moldb/views.py", line 94, in login
if request.POST:
AttributeError: 'User' object has no attribute 'POST'
这是我的代码:
URL 在 urls.py
中:
url(r'^login$', moldb.views.login, name='login')
views.py
中的登录视图:
def login(request):
print(request, type(request))
logout(request)
if request.POST:
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
login(user)
return HttpResponseRedirect('/')
return render(request, "login.html")
login.html
中的登录表单:
<form class="form-horizontal" name="LoginForm" action="{% url 'login' %}" method="post">
{% csrf_token %}
{% if next %}
<input type="hidden" name="next" value="{{ next }}" />
{% endif %}
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" id="username" name="username" placeholder="Username">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" name="password" id="password" placeholder="Password">
</div>
</div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn">Login</button>
</div>
</div>
</form>
我发现 views.py
中 print(request, type(request))
的输出在提交表单后如下:
<WSGIRequest: POST '/login'> <class 'django.core.handlers.wsgi.WSGIRequest'>
hanicka <class 'django.contrib.auth.models.User'>
hanicka
是经过身份验证的用户的用户名(我通过登录表单发送的用户名)。 很明显异常是从这里来的,但是这个视图怎么执行了两次,User
模型怎么来的?!
我不熟悉 Django,我缺少一些上下文,但只要看看你的代码、你遵循的示例和 Django 文档,我很好奇如果你选择不同的 login
函数为:
def login_user(request):
以防出现命名冲突...