首页 > 解决方案 > 是否可以在返回响应之前对数据进行计算?

问题描述

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

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

结果可能如下所示:

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

标签: djangodjango-rest-framework

解决方案


鉴于您想要返回一个相当定制的响应,最好APIView直接扩展、覆盖get()和创建 JSON。这会给你一些灵活性,而不是尝试用更适合序列化模型上特定字段的ModelViewSets 和s 做同样的事情。Serializer

例如,如果您的模型被调用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参见此处


推荐阅读