DRF Пагинация пользовательского ответа без модели APIView
Здравствуйте, у меня есть проект на Django, который выполняет несколько запросов к различным базам данных, возвращая их в несколько конечных точек, для этого я использую Pandas и DRF (APIViews)
Проблема возникает, когда ответ очень длинный и логически у сервера заканчивается память, я понимаю, что мне нужно пагинация результата, но я не нашел способ сделать это, потому что я не использую модели или сериализаторы, я делаю сырые запросы с pandas, чтобы сделать запросы.
Есть ли способ постранично отобразить результаты так, как я это делаю?
Оставляю несколько фрагментов своего кода.
class AffiliateAPIView(APIView):
permission_classes = (IsAuthenticated,)
def get(self, request):
insurance = self.request.query_params.get('insurance', None)
emergensys_df = pd.read_sql_query(general_attention(insurance), engine())
return Response(emergensys_df.to_dict(orient='records'))
Вам следует реализовать потоковый ответ. В Django для этого есть StreamingHttpResponse
: https://docs.djangoproject.com/en/3.2/ref/request-response/#streaminghttpresponse-objects.
В основном, вы должны сделать следующее:
- создайте генератор, который получает данные из базы данных по частям, используя
LIMIT
иOFFSET
SQL операторы, обрабатывает их и возвращает по частям либо. - создайте и верните
StreamingHttpResponse
и передайте в него генератор, как:return StreamingHttpResponse(your_generator)