我使用Django 1.11.4无法理解为什么这段代码无效
我在登录前后尝试request.user.is_authenticated()
,但在这两种情况下我都会得到错误
如果我从admin登录,那么同一用户登录
user = authenticate(username='myuser',password='mypassword')
if user is not None:
if user.is_active:
print("before",request.user.is_authenticated())
login(request,user)
print("after",request.user.is_authenticated())
return HttpResponse("login success")
else:
return HttpResponse("account is disabled")
else:
return HttpResponse("invalid login")
答案 0 :(得分:2)
当然你可以实现自己的登录机制,但为什么不更容易理解和添加内置的内置机制?
首先导入django.contrib.auth.views模块并为登录和注销视图添加URL路由:
from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^login/$', auth_views.login, name='login'),
url(r'^logout/$', auth_views.logout, name='logout'),
url(r'^admin/', admin.site.urls),
]
默认情况下,django.contrib.auth.views.login
视图会尝试呈现registration/login.html
模板。因此,基本配置是创建一个名为registration
的文件夹,并在其中放置一个login.html
模板,如下所示:
% extends 'base.html' %}
{% block title %}Login{% endblock %}
{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% endblock %}
这个简单的示例已经验证了用户名和密码,并正确地验证了用户。然后你可以使用login_required 装饰。
答案 1 :(得分:0)
我认为是因为你设置了一个新变量(用户)
user = authenticate()
但如果再次引用request.user,请在里面
print(request.user.is_authenticated())
删除请求......所以
print(user.is_authenticated())