django - 是否可以在返回响应之前对数据进行计算?
问题描述
我想创建一个 API,以便当用户请求某种类型的数据时,我想查询数据库,并基于该数据创建一个 HTML 并以 JSON 端返回它。
我对 django 和其他框架还很陌生,但我已经学会了如何创建基本的 API 来序列化模型并返回它。现在我想在返回数据之前做一些事情。
结果可能如下所示:
{
"html_response": "<table> (table based on the data) </table>"
}
解决方案
鉴于您想要返回一个相当定制的响应,最好APIView
直接扩展、覆盖get()
和创建 JSON。这会给你一些灵活性,而不是尝试用更适合序列化模型上特定字段的ModelViewSet
s 和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
参见此处
推荐阅读
- git - 如何将具有显式权限的用户添加到 ADO 中的存储库?
- python - accuracy_score 和precision_score 可以相等吗?
- vim - 如何仅为vim中的fortran文件设置colorcolumn = 6?
- cyber-ark - CPM 可以登录并验证密码,但无法更改密码
- javascript - 使用 FBSDKCoreKit.framework 在 Xcode10 中发现意外的 Mach-O 标头代码:0x72613c21
- python - for循环中的Python多处理;循环之间未清除内存
- java - 将csv-table映射到具有不同属性名称的json的简单方法,而不是带有gson的csv-headers?
- qt - ffmpeg RTSP 流解码内存泄漏
- java - java.lang.ClassCastException:无法转换为 RssLargeViewHolder
- c - 我如何在 UEFI 驱动程序中设置固件环境变量