Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-为什么user.u在注销后经过身份验证并断言为true_Python_Django_Django Authentication - Fatal编程技术网

Python Django-为什么user.u在注销后经过身份验证并断言为true

Python Django-为什么user.u在注销后经过身份验证并断言为true,python,django,django-authentication,Python,Django,Django Authentication,我正在尝试编写一个测试,用于注销Django中的用户。代码如下: url.py from django.conf.urls import url from django.contrib import admin from accounts.views import LoginView, LogoutView urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', LoginView.as_view()

我正在尝试编写一个测试,用于注销Django中的用户。代码如下:

url.py

from django.conf.urls import url
from django.contrib import admin
from accounts.views import LoginView, LogoutView


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/', LoginView.as_view(), name='login'),
    url(r'^logout/', LogoutView.as_view(), name='logout'),
]
views.py

from django.http import HttpResponseRedirect
from django.contrib.auth import login, logout
from django.views.generic import View


class LogoutView(View):
    def get(self, request):
        logout(request)
        return HttpResponseRedirect('/')
tests.py

from django.test import TestCase, Client
from django.contrib.auth.models import User


class LogoutTest(TestCase):
    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user(
            username='user1',
            email='user1_123@gmail.com',
            password='top_secret123'
        )

    def test_user_logs_out(self):
        self.client.login(email=self.user.email, password=self.user.password)
        self.assertTrue(self.user.is_authenticated)

        response = self.client.get('/logout/')

        self.assertFalse(self.user.is_authenticated)
        self.assertRedirects(response, '/', 302)
断言
self.assertFalse(self.user.is\u经过身份验证)
失败。通过浏览器进行测试似乎效果良好。在调用logout()之后,用户似乎无法进行身份验证。我错过什么了吗

调用
logout()
后,用户似乎无法通过身份验证。我错过什么了吗

不检查用户是否已登录。每个real
用户
总是返回
True
,因为
经过身份验证
。例如,将返回
False
。如果您因此注销,
request.user
将是
匿名用户
,因此不会被验证

换句话说,如果您使用
request.user.is_authenticated
,则如果会话绑定到用户(您使用浏览器登录),您将在登录用户上调用此函数;如果浏览器未登录用户/浏览器已注销,您将在
AnonymousUser
上调用此函数