2 回答

TA贡献1804条经验 获得超7个赞
您可以在序列化程序类中执行此操作
class UserSerializer(ModelSerializer):
class Meta:
model=User
fields = ('Username', 'Password', #others)
def create(self, validated_data):
user = User()
user.Username = validated_data['Username']
user.Password = make_password(validated_data['Password'])
# other
'make_password' 可以是你想要的任何函数
然后在视图中保存序列化程序

TA贡献1875条经验 获得超5个赞
如果User对象仅从Register视图创建,则覆盖工作正常的create方法UserSerializer。但是,通过其他方式(管理界面、django 表单、管理命令等)创建的用户不会加密他们的密码,除非您提供一些代码来以所有这些方式进行加密。
要在保存任何用户之前散列密码,更好pre_save的save方法是创建一个信号或覆盖User散列密码的方法(序列化程序和视图不会改变)
class User(models.Model):
...
def save(self, **kwargs):
self.password = make_password(self.password)
return super(User, self).save(**kwargs)
在调用之前确保密码不存在或已更改,make_password以不对已编码的密码进行编码
添加回答
举报