django rest-framework serializer 数据data校验失败返回状态码
serializer raise 状态码修改
class TestSerializer(serializers.ModelSerializer):
def create(self, validated_data):
hos = test.objects.filter(name=validated_data['name']).first()
if hos:
res = serializers.ValidationError({"code":10400, "msg":"Hospital name already exists", "data":[]})
res.status_code = 200
raise res
instance = Test.objects.create(**validated_data)
return instance

rest-framework 自定义异常
tools/exception_handler.py
from rest_framework.views import exception_handler
from rest_framework import exceptions
from rest_framework.response import Response
def custom_exception_handler(exc, context):
if type(exc) is exceptions.ValidationError:
response = Response(status=200)
data = [v[0] for k,v in exc.detail.items()][0]
response.data = {'code':10400,'msg':data, 'data':{}}
elif isinstance(exc, exceptions.AuthenticationFailed):
response = Response(status=200)
response.data = {'code':10404,'msg':exc.detail, 'data':{}}
elif isinstance(exc, exceptions.ParseError):
response = Response(status=200)
response.data = {'code':10400,'msg':exc.detail, 'data':{}}
else:
response = exception_handler(exc, context)
print(response.data.get('detail'))
return response
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
配置文件中加入
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'tools.exception_handler.custom_exception_handler',
}
