python - Django JsonResponse 忽略了自定义编码器
问题描述
我正在使用 Django Rest Framework(版本:django 3.1、djangorestframework 3.11.1、python 3.7)构建一个应用程序
我想覆盖 JsonResponse 中使用的编码器。
我的问题的过度简化:
from django.http import JsonResponse
from django.core.serializers.json import DjangoJSONEncoder
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return o + 10
response = JsonResponse({"data": 1}, encoder=CustomEncoder)
我期望的response.getvalue()
是'{"data": 11}'
,但我得到的是'{"data": 1}'
.
我究竟做错了什么 ?
解决方案
因为 DjangoJSONEncoder 用于
JSONEncoder subclass that knows how to encode date/time, decimal types, and
UUIDs.
您必须传递日期/时间、十进制类型或 UUID 等值,default
以便调用您的方法覆盖。
尝试更改为
class CustomEncoder(DjangoJSONEncoder):
def default(self, o):
return int(o) + 10
response = JsonResponse({"data": Decimal(1)}, encoder=CustomEncoder)
它将返回 {"data": 11}
推荐阅读
- yaml - 将 oneOf 与属性对象中的共享元素一起使用
- c# - 如何创建在 aspnet core 3 上返回错误请求的自定义 api 参数验证属性?
- python - 如何在 Dash 中获取当前路径?
- javascript - chrome对大于10的数组使用什么排序方法?
- arrays - MongoDB 聚合、数组和逻辑操作
- python - 一个类的构造函数可以在 Python 中返回另一个类吗?
- c# - 我已经在 Xamarin.iOS 中使用 Xamarin.Auth 实现了 Google 登录,但是登录后它没有重定向回我的应用程序?如何解决?
- javascript - 从 Javascript 脚本中执行 PHP 函数
- python - 零方差去除
- spring - Spring JPA,@ManyToMany,SQL 语法错误