Saj*_*ain 2 python api django django-views django-rest-framework
我想通过 API 视图创建用户。但我遇到这个问题:
序列化器.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
Run Code Online (Sandbox Code Playgroud)
视图.py
class UserRegistration(CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
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
Run Code Online (Sandbox Code Playgroud)
否则,User.password 将在数据库中被锁定而不进行散列,这是不安全的。
您也可以使用默认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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |