在 Django Rest Framework 中使用自定义查询 return JSON
Using custom query to return JSON in Django Rest Framework
我开始使用 Django rest,我想知道:
我可以创建一个视图或其他东西来进行自定义查询和 return JSON 吗?
是的。只需执行您想要的任何查询,将数据转换为字典,然后 return 使用标准响应即可。
不需要特殊的 JsonResponse
类型的 class。您可以在 DEFAULT_RENDERER_CLASSES
settings of DRF.
中指定默认渲染器
class MyView(views.APIView):
def get(self, request):
data = execute_to_dict(
"SELECT a, b FROM x WHERE y = %s AND z = %s"
["yvalue", 73]
)
return Response({
'count': len(data),
'results': data
})
def execute_to_dict(query, params=None):
with connection.cursor() as c:
c.execute(query, params or [])
names = [col[0] for col in c.description]
return [dict(list(zip(names, values))) for values in c.fetchall()]
这将输出如下内容:
{
"count": 1,
"results": [
{
"a": "value for a",
"b": "to be"
},
{
"a": "row 2!",
"b": "or not 2 be"
}
]
}
我开始使用 Django rest,我想知道:
我可以创建一个视图或其他东西来进行自定义查询和 return JSON 吗?
是的。只需执行您想要的任何查询,将数据转换为字典,然后 return 使用标准响应即可。
不需要特殊的 JsonResponse
类型的 class。您可以在 DEFAULT_RENDERER_CLASSES
settings of DRF.
class MyView(views.APIView):
def get(self, request):
data = execute_to_dict(
"SELECT a, b FROM x WHERE y = %s AND z = %s"
["yvalue", 73]
)
return Response({
'count': len(data),
'results': data
})
def execute_to_dict(query, params=None):
with connection.cursor() as c:
c.execute(query, params or [])
names = [col[0] for col in c.description]
return [dict(list(zip(names, values))) for values in c.fetchall()]
这将输出如下内容:
{
"count": 1,
"results": [
{
"a": "value for a",
"b": "to be"
},
{
"a": "row 2!",
"b": "or not 2 be"
}
]
}