如何在django rest中实现验证错误信息?

问题描述 投票:1回答:1

我刚刚开始学习python和django rest框架。我正在用django创建示例apis。我有一个问题,我需要设置验证错误信息。

例如 电子邮件被请求或电子邮件已经存在

这是我的代码。

序列器类:

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        #fields = ['id','title','author','date']
        fields = '__all__'

views.py

def post(self,request):
        serializer = ArticleSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.error,status = status.HTTP_400_BAD_REQUEST)

模型:Views.py

class Article(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    email = models.EmailField(max_length=100)
    date = models.DateTimeField(auto_now_add = True)


    def _str_(self):
        #self.fields['email'].required = False
        return self.title 

错误是。

'ArticleSerializer' object has no attribute 'error'
python django django-rest-framework
1个回答
2
投票

你不需要手动处理验证。

def post(self, request):
    serializer = ArticleSerializer(data=request.data)
    serializer.is_valid(raise_exception=True):
    serializer.save()
    return Response(serializer.data, status=status.HTTP_201_CREATED)

这将引发一个Exception,但异常将由DRF处理(只要你正确使用它),并将返回一个400状态码和预期的错误信息。

此外,这个视图的功能和一个 创建APIView,你可能会更好地使用,而不是重新发明轮子。


0
投票

尝试使用 serializer.errors 而不是 serializer.error.

这将避免你得到的错误,它将返回你所期望的HTTP错误。

© www.soinside.com 2019 - 2024. All rights reserved.