我在我的fixtures/initial_data.json
中默认创建了一些用户,以便有一些测试“主题”。我遇到的问题是密码生成。我可以在“字段”中设置密码,但这不会生成散列密码:
[
{ "model": "auth.user",
"pk": 1,
"fields": {
"username": "user1",
"password": "password"
}
}
]
我需要一个生成用户密码的方法,我是否需要像Django那样手动生成一个类似{hash_method}${salt}${hashed_password}
的字符串?
6条答案
按热度按时间bmp9r5qi1#
在这种情况下(如果您只需要几个用户),更简单的方法是通过admin创建一些假用户帐户(包括密码),然后使用 dumpdata 将这些用户转储到fixture文件中:
它将自动为您创建设备,并可在以后与 loaddata 一起使用
(You如果您需要大量的测试用户,可以只创建一个假帐户,然后在其余的fixture中使用散列)
https://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model
ylamdve62#
好吧,我同意你的回答,但还是让我来回答原来的问题吧。
如何获得“Django会散列的密码“?
让我们看看文件
django/contrib/auth/hashers.py
:请参见此示例会话:
您也可以手动使用hasher的
encode
方法,但是上面的实用函数以一种更简单的方式涵盖了您。4sup72z83#
我在为测试编写fixture时遇到了同样的问题,下面是我在单元测试中处理这个问题的方法。
从管理员创建数据并将其转储到fixture works中,但我不太喜欢依赖于手动操作。
按照之前的步骤创建fixture,然后在
setUp
方法中,为用户创建set_password
。用户_夹具.json
测试用户.py
这样,我就可以在fixture中干净地编写密码,并在需要时引用它们,而且只需编辑fixture文件就可以创建更多的fixture。
2lpgd9684#
除了@GauravButola的答案之外,我还创建了一个自定义管理命令来加载fixture并在一个步骤中修复密码。当不使用测试框架来设置密码时,这很有用。该示例使用的是django 1.11,可能还有更早的版本。
在提供fixture的应用中添加管理命令(这是python3次,所以我省略了init pys):
initdata.py看起来像这样:
现在,您可以通过调用以下命令加载initial_data并获得有效密码:
nom7f22z5#
从数据库转储用户信息:
导入/加载数据特定JSON fixture:
ldxq2e6h6#
很确定你做了。它不应该是那么困难。最简单的方法将是看函数
user.set_password
我认为它是,并且看他们如何做它。你可能可以从一个python终端调用函数并且然后拷贝它到你的初始数据!