2017-09-24 56 views
0

我使用Django 1.11.4不明白为什么这个代码不工作 我想request.user.is_authenticated()登录前后,但在这两种情况下,我得到假Django的身份验证登录不工作

,如果我从登录管理员然后同一个用户登录

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") 
+1

你是如何在你的视图中导入'login'的? – Alasdair

回答

0

我认为它,因为你设置一个新的变量(用户)

user = authenticate() 

,但里面如果您参考请求。用户再次

print(request.user.is_authenticated()) 

删除请求......所以

print(user.is_authenticated()) 
1

当然,但是你可以实现自己的登录机制,为什么不专门使用内置的一个时,它是更容易理解和补充的吗?

先导入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