Kak*_*aji 6 python django python-3.x django-rest-framework
我在Django REST框架中具有以下自定义异常处理程序。
class ErrorMessage:
def __init__(self, message):
self.message = message
def insta_exception_handler(exc, context):
response = {}
if isinstance(exc, ValidationError):
response['success'] = False
response['data'] = ErrorMessage("Validation error")
return Response(response)
Run Code Online (Sandbox Code Playgroud)
我想要一个JSON输出,如下所示
"success":false,
"data":{ "message" : "Validation error" }
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误TypeError: Object of type 'ErrorMessage' is not JSON serializable
。为什么像ErrorMessage
上面这样简单的类不能JSON可序列化?我怎么解决这个问题?
我认为更通用的方法是创建一个序列化程序来序列化错误消息对象:
from rest_framework import serializers
class ErrorMessageSerializer(serializers.Serializer):
message = serializers.CharField(max_length=256)
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
def insta_exception_handler(exc, context):
...
serializer = ErrorMessageSerializer(ErrorMessage("Validation error"))
response["data"] = serializer.data
...
Run Code Online (Sandbox Code Playgroud)
它是不可序列化,因为它是一个object
,它应该是dict
,list
或普通值。但是您可以通过使用魔法属性轻松解决您的问题__dict__
def insta_exception_handler(exc, context):
response = {}
if isinstance(exc, ValidationError):
response['success'] = False
# like this
response['data'] = ErrorMessage("Validation error").__dict__
return Response(response)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8465 次 |
最近记录: |