Python django:assertRedirect清除会话数据django
我是Django的初学者,正在编写一个简单的会计应用程序。现在我已经开始为这个应用程序编写一些测试用例 我的应用程序中有一个Python django:assertRedirect清除会话数据django,python,django,python-3.x,Python,Django,Python 3.x,我是Django的初学者,正在编写一个简单的会计应用程序。现在我已经开始为这个应用程序编写一些测试用例 我的应用程序中有一个个人资料表单,允许用户编辑个人资料。如果数据已成功更改,我将调用HttpResponseRedirect到index页面 我使用assertRedirect方法来确保当表单数据正确时,页面被重定向到索引页面 但是当我在TestCase类中调用这个方法时,我看到它清除了会话数据,用户不再登录 以下是我的代码的一些部分: class TestEditProfile(TestCa
个人资料
表单,允许用户编辑个人资料。如果数据已成功更改,我将调用HttpResponseRedirect
到index
页面
我使用assertRedirect
方法来确保当表单数据正确时,页面被重定向到索引
页面
但是当我在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
一些请求到profile
页面,它会忽略它,因为profile
视图是login\u必需的
我的代码中有问题吗
非常感谢
更新:我使用pydev调试器深入查看了代码,并意识到此方法会清除用户会话数据:
if fetch_redirect_response:
redirect_response = response.client.get(path, QueryDict(query),
secure=(scheme == 'https'))
源代码是文件testcase.py的第320行
在运行这一行之前,self.client.session.\u session
大小为3,并且有键:“auth\u user\u backend”(4413833840)
,“auth\u user\u hash”(4411636976)
和“auth\u user\u id”(4408855216)
,但在运行这一行之后,session.session.\u session被完全清除 抱歉,您是手动调用该方法还是通过python manage.py test
调用该方法?您是如何看待这一点的?在同一个方法中是否有更多的代码,或者是一个单独的测试方法?我使用python manage.py test
。代码中还有一些东西,但并不重要,因为当我使用pycharm调试器调试代码时,我意识到在调用上述方法后,用户会话数据将被清除@daniel roseman@irvindSorry,但是您是手动调用该方法还是通过python manage.py test
调用该方法?您是如何看待这一点的?在同一个方法中是否有更多的代码,或者是一个单独的测试方法?我使用python manage.py test
。代码中还有一些东西,但并不重要,因为当我使用pycharm调试器调试代码时,我意识到在调用上述方法后,用户会话数据将被清除@丹尼尔·罗斯曼@irvind