【问题标题】:Django restframework, extra_kwargs not workingDjango 休息框架,extra_kwargs 不工作
【发布时间】:2018-08-03 05:49:56
【问题描述】:

我有一个自定义用户模型。我创建了一个用于用户注册的 api。以下是我的序列化程序。

class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
        required=True,
        validators=[
            UniqueValidator(queryset=get_user_model().objects.all())
        ]
    )
    password = serializers.CharField(min_length=8)

    class Meta:
        model = get_user_model()
        fields = ('email', 'password')
        extra_kwargs = {'password': {'write_only': True}, }

    def create(self, validated_data):
        email = validated_data.pop('email')
        password = validated_data.pop('password')
        user = get_user_model().objects.create_user(email, password, **validated_data)
        return user

这是我的看法:

class Registration(generics.CreateAPIView):
    serializer_class = UserSerializer
    queryset = get_user_model().objects.all()

有两个输入 emailpasswordpassword 字段作为 write_only 字段给出。但是在创建用户之后,api 返回散列密码。如何防止密码被退回?

【问题讨论】:

标签: python django rest django-rest-framework


【解决方案1】:

如果使用extra_kwargs,则不需要在序列化程序上显式声明该字段,试试这个:

class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(
        required=True,
        validators=[
            UniqueValidator(queryset=get_user_model().objects.all())
        ]
    )

    class Meta:
        model = get_user_model()
        fields = ('email', 'password')
        extra_kwargs = {'password': {'write_only': True, 'min_length': 8}}

【讨论】:

  • 帮助很大。谢谢!
猜你喜欢
  • 2022-01-11
  • 2022-12-19
  • 2018-04-02
  • 2013-04-08
  • 2021-11-26
  • 1970-01-01
  • 2015-02-25
相关资源
最近更新 更多