【发布时间】:2021-10-11 10:16:21
【问题描述】:
我使用 djano rest 框架。我有模型、序列化器和视图:
class PictureModel(models.Model):
id = models.AutoField(primary_key=True)
url = models.CharField(max_length=256)
class PictureView(mixins.ListModelMixin, generics.GenericAPIView):
serializer_class = PictureSerializer
queryset = PictureModel.objects.all()
def get(self, request):
return self.list(request)
class PictureSerializer(serializers.ModelSerializer):
class Meta:
model = PictureModel
fields = '__all__'
获取请求返回json:
[
{
"id": 120525, "url": "https://ddd.com/upload/iblock/579/5797cc881f8790926cee4a8fc790d1bd.JPG"
},
{
"id": 120526, "url": "https://ddd.com/upload/iblock/382/382526e1deee07f60871430bd806aa71.JPG"
}
...
]
但我需要将这些数据包装到
{
"success": 1,
"data": [
{
"id": 120525, "url": "https://ddd.com/upload/iblock/579/5797cc881f8790926cee4a8fc790d1bd.JPG"
},
{
"id": 120526, "url": "https://ddd.com/upload/iblock/382/382526e1deee07f60871430bd806aa71.JPG"
}
...
]
我该怎么做?我可以使用中间件,但我不知道如何编辑响应数据。中间件适用于所有请求,但我不需要全部应用它。可能我可以使用我的渲染器,但我不知道如何使用。
附:我也使用 swagger 文档自动生成器。
2021 年 8 月 9 日更新: 我指定。我不喜欢修改get函数的方式,因为我有很多视图。
我想要下一个。鉴于我可以抛出异常,然后捕获它并返回 {'success': 0, 'data': None, 'message': exc.message}。如果无异常返回 {'success': 1, 'data': data}
我可以做
def get(self, request):
try:
# code
return Response(data={'success': 1, 'data': data})
except MyException as ex:
return Response(data={'success': 0, 'data': None, 'message': exc.message})
但我不喜欢它。我尝试创建拥有的渲染类
class ApiRenderer(JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
if 'success' not in data:
data = {
'status': 1,
'data': data
}
return super(ApiRenderer, self).render(data=data, accepted_media_type=accepted_media_type,
renderer_context=renderer_context)
它有效。但是如果在我捕获它的地方抛出异常,并替换响应数据?
【问题讨论】:
标签: django django-rest-framework django-views django-serializer