mar*_*rue 11 python django django-testing
直到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)
Run Code Online (Sandbox Code Playgroud)
现在使用与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')
Run Code Online (Sandbox Code Playgroud)
但是这只会在第一行引发这种情况(创建用户时,而不是在分配密码时):
ValueError:未知的密码哈希算法''.您是否在PASSWORD_HASHERS设置中指定了它?
这是django不接受空密码的一些问题,所以我改为:
self.user = User.objects.create(username='testuser',password='!')
self.user.set_password('some_password')
Run Code Online (Sandbox Code Playgroud)
然后尝试以这样的方式记录用户:
login = self.client.login(username='testuser',password='some_password')
self.assertTrue(login)
Run Code Online (Sandbox Code Playgroud)
现在引起了AssertionError: False is not True一声叹息 - 我几乎期待......
我现在的问题是:如何使用密码创建用户,并使用django测试客户端登录此用户?
Tho*_*mas 16
self.user = User.objects.create(username='testuser',password='!')
self.user.set_password('some_password')
self.user.save() # <--- You need this ;)
Run Code Online (Sandbox Code Playgroud)
或者:从这里开始
self.user = User.objects.create_user(username='user', email='email@example.com', password='pass')
Run Code Online (Sandbox Code Playgroud)
mar*_*rue 15
在寻找解决方案时,我发现了另外一件可行的方法,尽管我很可能会使用Thomas User.objects.create_user解决方案,因为这非常简单.
但无论它值多少,这就是我想出的:
from django.contrib.auth.hashers import make_password
pwd = make_password('some_password')
self.user = User.objects.create(username='testuser', password = pwd)
Run Code Online (Sandbox Code Playgroud)
工作得很好.
正如我刚刚发现的那样,在手动创建灯具时非常有帮助.当您创建用于测试的夹具时,您可能希望像这样的用户:
用户名:user_01密码:password_01
但是我怎么知道什么是password_01在哈希时会是什么样子?散列值必须存储在夹具中以进行测试,而make_password正是这样做的:它从密码创建密码哈希值.只需写入make_password('password_01')夹具的返回值就可以了.
| 归档时间: |
|
| 查看次数: |
4355 次 |
| 最近记录: |