返回响应之前是否可以对数据进行计算?

时间:2019-01-04 14:31:56

标签: django django-rest-framework

我想创建一个API,以便当用户请求某种类型的数据时,我想查询数据库,并基于该数据创建HTML并以JSON形式返回。

我对django和其他框架还很陌生,但是我已经学习了如何创建对模型进行序列化并返回模型的基本API。现在,我想在返回数据之前先做些事情。

结果可能看起来像这样:

{
  "html_response": "<table> (table based on the data) </table>"
}

1 个答案:

答案 0 :(得分:1)

鉴于您要返回一个相当自定义的响应,因此最好直接扩展APIView,覆盖get()并以此方式创建JSON。与尝试使用ModelViewSetSerializer(它们更适合于序列化模型上的特定字段)进行相同的操作相反,这将为您提供一定的灵活性。

例如,如果您的模型名为MyModel,并且具有名为value的属性,则下面的示例将创建一个表,其中的每一列都包含value

from rest_framework import views
from rest_framework.response import Response

class MyEndPoint(views.APIView):

    def get(self, request):
        table = ['<table>']
        for rec in MyModel.objects.all():
            table.append('<tr><td>{}</td></tr>'.format(rec.value))
        table.append('</table>')
        return Response({'html_response': ''.join(table)})

您需要将其连接到urls.py

path('^html_table', myapp.views.MyEndPoint.as_view())

有关使用APIView创建视图的更多信息,请here