未知的密码哈希算法。PASSWORD_HASHERS 设置 - 使用 factory boy

3 投票
3 回答
1190 浏览
提问于 2025-04-17 17:19

如果我创建一个测试用的用户账户,就会出现这个错误:

未知的密码加密算法 'password1'。你在 PASSWORD_HASHERS 设置中指定了吗?

class ExampleTest(TestCase):
    def test_sample_data(self):
        for i in range(0,1):
            user = content.factories.UserFactory.create()

factories.py:

class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = factory.Sequence(lambda n: 'User' + n)
    email = 'mail@gmail.com'
    password = 'password1'

怎么解决这个问题呢?

3 个回答

0
user = content.factories.UserFactory.create()
user.set_password('yourpassword')
user.save()

这个回答是对问题的一个编辑,问题是未知的密码哈希算法。PASSWORD_HASHERS 设置 - 使用 factory boy,提问者是edekmax,根据 CC BY-SA 3.0 许可协议发布。

0
class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = 'user'
    password = factory.PostGenerationMethodCall('set_password',
                                            'defaultpassword')

可以在这里查看文档 https://factoryboy.readthedocs.org/en/v1.3.0/reference.html#postgenerationmethodcall

2

更新。文档中有说明,你应该使用factory.PostGenerationMethodCall

class UserFactory(factory.Factory):
    class Meta:
        model = User

    username = 'user'
    password = factory.PostGenerationMethodCall('set_password',
                                                'defaultpassword')

旧答案。实际上,这在factory-boy 文档中有描述:

class UserFactory(factory.Factory):
    @classmethod
    def _prepare(cls, create, **kwargs):
        password = kwargs.pop('password', None)
        user = super(UserFactory, cls)._prepare(create, **kwargs)
        if password:
            user.set_password(password)
            if create:
                user.save()
        return user

最好使用这个解决方案,这样你就可以正确使用UserFactory.build()UserFactory.create()UserFactory.attributes()(后者会返回未加密的密码)

撰写回答