DRF (Django Rest Framework)是基于Django的RESTful框架,它提供了一系列用于構建Web API的常用工具和庫,讓我們能夠快速地構建高質量的API服務。在使用DRF時候,有時候需要給前端返回兩個json,本文將介紹如何進行操作。
首先,我們需要定義視圖View,這里我們以Class-Based-Views(CBV)為例。在視圖方法中,可以使用HttpResponse將處理好的數據返回給前端,如下所示:
from django.http import HttpResponse
class ReturnTwoJSONView(APIView):
def get(self, request, pk):
data1 = Model1.objects.filter(id=pk).values()
data2 = Model2.objects.filter(model1_id=pk).values()
return HttpResponse({
'data1': data1,
'data2': data2
})
在上述代碼中,我們通過Model1和Model2分別獲取了數據data1和data2,并將它們打包在一個HttpResponse對象中返回。這種方法對于數據量比較小的情況下,速度相對較快,而且代碼量也比較容易理解。
然而,當需要處理的數據量較大時,使用HttpResponse來進行返回數據就不太合適了。這時,我們可以使用StreamingHttpResponse來進行數據分批返回,以提高數據處理效率。
from django.http import StreamingHttpResponse
class ReturnTwoJSONView(APIView):
def get(self, request, pk):
data1 = Model1.objects.filter(id=pk).values()
data2 = Model2.objects.filter(model1_id=pk).values()
def return_data():
yield '{'
yield '"data1":'
for data in data1:
yield f'{data},'
yield '"data2":'
for data in data2:
yield f'{data},'
yield '}'
response = StreamingHttpResponse(
streaming_content=return_data(),
content_type='application/json',
)
response['Content-Disposition'] = 'attachment; filename="two_data.json"'
return response
在上述代碼中,我們使用了yield來拆分返回數據,這樣當數據量比較大時就可以進行分批處理,提高數據處理效率。然后我們使用StreamingHttpResponse將處理好的數據返回給前端。此時,需要設置content_type為'application/json',告訴瀏覽器返回的是JSON數據。最后,設置Content-Disposition讓瀏覽器把應答體封裝成一個文件并下載到本地。
總的來說,通過HttpResponse和StreamingHttpResponse方法都可以給前端返回兩個JSON數據,根據自己的業務場景及數據處理量選擇合適的返回方法即可。