在 django 1.2.5 之前,我可以使用以下代码创建一个用户进行测试,然后登录:
class TestSomeLoginRequiredView(TestCase):
urls = 'sonloop.tests.test_urls'
def setUp(self):
self.user = User.objects.create(username='testuser',password='some_password')
def test_the_view(self):
response = self.client.get('/test_view_url/')
self.assertEqual(response.status_code,401)
self.client.login(username='testuser',password='some_password')
response = self.client.get('/test_view_url/')
self.assertEqual(response.status_code,200)
现在在 django 1.4 中使用相同的代码不再有效:
ValueError: Unknown password hashing algorithm 'some_password'. Did you specify it in the PASSWORD_HASHERS setting?
我知道这与新的密码哈希系统有关。我没有使用 PASSWORD_HASHERS 设置,所以 Django 应该使用一些默认设置。
Django 文档现在很少关于如何实现类似的东西。在测试部分没有任何改变。从关于创建密码和如何散列它们的部分,我可以看到我可能会创建一个这样的密码:
self.user = User.objects.create(username='testuser')
self.user.set_password('some_password')
但这只会在第一行引发这种错误(在创建用户时,而不是在分配密码时):
ValueError: Unknown password hashing algorithm ''. Did you specify it in the PASSWORD_HASHERS setting?
这是 django 不接受空密码的一些问题,所以我将其更改为:
self.user = User.objects.create(username='testuser',password='!')
self.user.set_password('some_password')
然后尝试像那样登录用户:
login = self.client.login(username='testuser',password='some_password')
self.assertTrue(login)
现在引发了一个 AssertionError: False is not True
叹息 - 我几乎预料到......
我现在的问题是:如何创建一个带密码的用户,并使用 django 测试客户端登录该用户?
最佳答案
self.user = User.objects.create(username='testuser',password='!')
self.user.set_password('some_password')
self.user.save() # <--- You need this ;)
self.user = User.objects.create_user(username='user', email='email@example.com', password='pass')
关于python - 使用 PASSWORD_HASHERS 为 unittest 用户创建一个简单的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10120518/