从 django rest 框架中的序列化程序发送自定义错误响应?

Send Custom Error response from serializer in django rest framework?

我想将自定义响应从序列化程序创建视图发送到我的应用程序的前端。我尝试了休息框架响应教程,但它不起作用。我的代码是:

class UserSerializer(serializers.ModelSerializer):
"""Serializer to serialize user model object"""

    class Meta:
        model = User
        fields = ('id', 'username', 'password', 'first_name', 'last_name')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        """create a new user"""

        firstname = self.initial_data['first_name']
        lastname = self.initial_data['last_name']
        fullname = str(firstname) +" "+ str(lastname)
        email = self.initial_data['username'].lower()

        try:
           customer = User.create(
                name=fullname,
                email=email)

        except Error as e:
            error = {'message': e._message or 'Unknown error'}
            return Response(error,status=status.HTTP_400_BAD_REQUEST)

所以你想从这个视图更改用户的表示(JSON 响应的形状)。为此,您需要更改序列化程序中的 .to_representation(self, obj) 方法:

class UserSerializer(serializers.ModelSerializer):
    """Serializer to serialize user model object"""
     class Meta:
        model = User
        fields = ('id', 'username', 'password', 'first_name', 'last_name',)
        write_only_fields = ('id', 'password',)

    def to_representation(self, obj):
        return {
            'firstname': obj.first_name,
            'lastname': obj.last_name,
            'fullname': obj.first_name+' '+obj.last_name,
            'email': obj.username.lower()
        }

这应该意味着无论何时发出使用此序列化程序的请求,用户都只会在 JSON 中看到这 4 个字段,例如

{
    "firstname":"Salman",
    "lastname": "Ahmed",
    "fullname": "Salman Ahmed",
    "email": "salman_ahmed@email.com"
}

更多详情is hidden in their docs here

serializers.py

class UserSerializer(serializers.ModelSerializer):
"""Serializer to serialize user model object"""

    class Meta:
        model = User
        fields = ('id', 'username', 'password', 'first_name', 'last_name')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        """create a new user"""

        firstname = validated_data['first_name']
        lastname = validated_data['last_name']
        fullname = str(firstname) +" "+ str(lastname)
        email = validated_data['username'].lower()

        try:
           customer = User.objects.create(
                name=fullname,
                email=email)
           return customer

        except Exception as e:
            error = {'message': ",".join(e.args) if len(e.args) > 0 else 'Unknown Error'}
            raise serializers.ValidationError(error)