【问题标题】:Send Custom Error response from serializer in django rest framework?从 django rest 框架中的序列化程序发送自定义错误响应?
【发布时间】:2018-04-29 18:10:32
【问题描述】:

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

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)

【问题讨论】:

    标签: django python-3.x django-models django-rest-framework django-serializer


    【解决方案1】:

    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)
    

    【讨论】:

    • 非常感谢。 @origamic
    【解决方案2】:

    因此,您希望从此视图更改用户的表示形式(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 的更多详细信息。

    【讨论】:

    • 感谢@Splatmistro 的回复。我只是将我的错误显示为自定义响应。每当我在用户创建过程中遇到错误时,我都会显示该错误。
    • 哦,我误解了你的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多