栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我的Django用户模型的密码没有散列?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我的Django用户模型的密码没有散列?

问题是DRF只需将字段值设置到模型上即可。因此,密码在“密码”字段中设置,并保存在数据库中。但是要正确设置密码,你需要调用该

set_password()
方法,该方法将进行哈希处理。

有几种方法可以做到这一点,但是在REST framework v3上最好的方法是覆盖序列化器上的

update()
create()
方法。

class UserSerializer(serializers.ModelSerializer):    # <Your other UserSerializer stuff here>    def create(self, validated_data):        password = validated_data.pop('password', None)        instance = self.meta.model(**validated_data)        if password is not None: instance.set_password(password)        instance.save()        return instance    def update(self, instance, validated_data):        for attr, value in validated_data.items(): if attr == 'password':     instance.set_password(value) else:     setattr(instance, attr, value)        instance.save()        return instance

这里有两件事:

  1. 我们使用
    self.meta.model
    ,因此,如果在序列化程序上更改了模型,则它仍然可以工作(只要有某种
    set_password
    方法就可以了)。
  2. 我们迭代
    validated_data
    项目而不是字段,以说明可选的excludeed字段。
    另外,此版本的
    create
    不会保存M2M关系。在你的示例中不需要,但是可以根据需要添加。你将需要从字典中弹出这些文件,保存模型并随后进行设置。

FWIW,因此,我将这个答案中的所有python代码设为全球公共域。它的分发没有任何保证。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号