Python Django test.Client已登录,但在视图中作为匿名用户传递
我这里有个奇怪的问题 我正在尝试测试@login\u必需的视图,因此我编写了以下代码: 来自django.test的Python Django test.Client已登录,但在视图中作为匿名用户传递,python,django,unit-testing,django-testing,Python,Django,Unit Testing,Django Testing,我这里有个奇怪的问题 我正在尝试测试@login\u必需的视图,因此我编写了以下代码: 来自django.test的导入测试用例 从django.test导入客户端 从.models导入站点电子商务 from.models将客户机作为TestDbClient导入 从.models导入MyCustomEmailUser 类DataBaseTestCase(TestCase): 定义初始化(self,*args,**kwargs): super(DataBaseTestCase,self)。\uuu
导入测试用例
从django.test导入客户端
从.models导入站点电子商务
from.models将客户机作为TestDbClient导入
从.models导入MyCustomEmailUser
类DataBaseTestCase(TestCase):
定义初始化(self,*args,**kwargs):
super(DataBaseTestCase,self)。\uuuuu init\uuuuu(*args,**kwargs)
self.c=Client()#实例化Django测试客户端
self.user=MyCustomEmailUser.objects.all()[0]
def测试方法(自身):
"""
测试设置页面。
"""
self.c.login(用户名=self.user.email,密码=self.user.password)
打印self.user.is_已验证()
response=self.client.get('/main/settings/%s'%self.website.idsite)
self.assertEqual(response.status_代码,200)
名为settings\u view
的视图,其中我正在打印请求。用户
问题是,在测试中,
print self.user.is_authenticated()
giveTrue
,但是视图中的request.user
返回AnonymousUser
首先,不需要使用self.c=client()
创建新的客户端-只需使用self.client
。您不应使用\uuuu init\uuuu
方法访问数据库。相反,您应该在设置
或方法中设置用户
def setUp(self, *args, **kwargs):
self.user = MyCustomEmailUser.objects.all()[0]
如果要检查客户端登录是否工作,应检查self.client.login(…)
的值。没有必要检查self.user.is\u authenticated(),因为它将始终返回True
您在中的登录不起作用,因为self.user.password
是哈希密码,而不是实际密码
您可以使用
简短的版本:“这可能是你的固定装置。”
长版本 升级到1.11后我遇到了这个问题。我花了一分钟才弄明白,但当您升级版本时,Django会升级后端密码哈希器用于测试密码的迭代次数 这样做的结果是,在您的测试中,您可能会有一个带有以下线条的夹具:
"password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
在您的测试中,您可能会遇到以下情况:
self.client.login(username='pandora', password='password')
事实证明,当您升级了Django版本并获得了这些额外的哈希值时,旧的fixture不再工作,因为新的Django对测试代码提供的密码进行哈希处理的次数超过了fixture中的值
解决方案:
有趣的东西。对不起,不好玩。哑巴。谢谢您的回答@Alasdair,但我遇到了一个错误:
Save with update\u字段不会影响任何行。
我不确定是什么导致了这个错误。这可能是因为您使用了\uuu init\uu
而不是设置
。如果更改该选项无法解决问题,那么您需要提供更多信息,包括完整的回溯。我遇到了相同的问题:force_login
而不是login
给出了相同的结果(没有任何错误)。我遇到了相同的问题:您找到了解决方案吗?
self.client.login(username='pandora', password='password')
"password": "pbkdf2_sha256$36000$OIQCpvIXZil8$y7qUtb3Y0imzu1ATn4vQZeVtu7MuPg0zUqX5oBUL2zM=",