django:assertRedirect清除会话数据django

时间:2016-03-20 13:52:41

标签: python django python-3.x

我是Django的初学者,我正在编写一个简单的会计应用程序。现在我开始为这个应用程序编写一些测试用例。

我的应用中有一个profile表单,允许用户编辑自己的个人资料。如果数据已成功更改,请致电HttpResponseRedirectindex

我使用assertRedirect方法确保在表单数据正确时将页面重定向到index页面

但是当我在我的TestCase类中调用此方法时,我发现它清除了会话数据并且用户不再登录

以下是我的代码的一些部分:

class TestEditProfile(TestCase):

    def test_change_password(self):
        response = self.client.get(reverse('account:profile'))
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'First name')
        data = self.get_user_data()
        response = self.client.post(reverse('account:profile'), data=data)
        self.assertRedirects(response, reverse('account:index'))

当我调试我的程序时,我看到在调用self.assertRedirects后,用户会话数据将被清除,用户不再登录,所以如果我想post请求{{1}它会忽略它,因为profile视图为profile

我的代码或其他内容是否有问题?

非常感谢

更新:我使用login_required对代码进行了深入研究,并意识到此方法会清除用户会话数据:

pydev debugger

源代码是file:testcase.py

的第320行

在运行此行之前if fetch_redirect_response: redirect_response = response.client.get(path, QueryDict(query), secure=(scheme == 'https')) 的大小为3并且有键:self.client.session._session'_auth_user_backend' (4413833840)'_auth_user_hash' (4411636976)但是在运行此行之后'_auth_user_id' (4408855216)已完全清除!

0 个答案:

没有答案