django auth登录不起作用

时间:2017-09-24 12:08:07

标签: python django

我使用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")

2 个答案:

答案 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())