在 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:未知密码散列算法“some_password”。您是否在 PASSWORD_HASHERS 设置中指定了它?
我知道这与新的密码哈希系统有关。我不使用 PASSWORD_HASHERS 设置,所以 Django 应该使用一些默认值。
Django 文档现在关于如何实现类似的东西非常稀少。在测试部分没有任何改变。从关于创建密码和如何散列密码的部分,我可以看到我可能会创建一个这样的密码:
self.user = User.objects.create(username='testuser')
self.user.set_password('some_password')
但这只会在第一行引发这种感觉(在创建用户时,而不是在分配密码时):
ValueError:未知密码散列算法''。您是否在 PASSWORD_HASHERS 设置中指定了它?
这是 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 测试客户端登录该用户?