python - 基于 Django 类的视图中的密码格式无效或未知散列算法
问题描述
我想通过 API 视图创建用户。但我遇到了这个问题:
序列化程序.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
视图.py
class UserRegistration(CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
我怎么解决这个问题?
解决方案
您应该在保存新用户对象之前覆盖序列化程序的create()
方法来散列密码。您可以set_password
为此使用:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
否则 User.password 将在 DB 中被盯着,没有散列,这是不安全的。
您也可以使用默认create_user
调用set_password
的方法:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
return User.objects.create_user(**validated_data)
推荐阅读
- java - 在 Android Studio 上遇到 Flutter 问题 - Win 10
- azure-synapse - 在 Azure Synapse 的 Spark 笔记本中运行上述所有单元
- php - 通过 Ajax/Post 推送数据
- bash - 有选择地防止命令出现在 Bash 历史文件中
- c# - 如何找到箭头的方向?
- r - 将多个 xlsx 文件合并到一个数据框中
- javascript - React 合成事件 onAnimationStart 似乎没有正确触发并且没有传递事件
- javascript - 如何创建一个节点的 MongoDB 副本集并使用 docker_compose.yml 对其进行初始化
- pushdown-automaton - 为以下语言构建一个 PDA
- amazon-web-services - AWS TreatMissingData 策略