我有一个使用Django的APIView类构建的API,它包括两个端点:start_report_generation和get_csv。当我点击start_report_generation端点时,它触发generate_report函数的执行,该函数执行一项耗时的任务,例如生成报告和创建相应的CSV文件。在访问带有报告ID的get_csv端点时,我想检查generate_report4函数是否已完成执行,并将生成的CSV文件作为响应。如果函数仍在运行,我希望返回一个响应,表明它仍在运行。
class TriggerReportView(APIView):
def generate_report(self, request):
report_id = generate_report4()
return Response({'report_id': report_id}, status=status.HTTP_202_ACCEPTED)
class GetReportView(APIView):
def get_csv(self, request):
report_id = req.query_params.get('report_id')
# How can I track the completion of the `generate_report4` function and serve the CSV file?
# How do I handle the case when the function is still running?
return Response({'status': 'Running'}) # Placeholder response for now
or
return Response Response(csv_file, content_type="text/csv")
1条答案
按热度按时间qfe3c7zg1#
您应该在
start_report_generation
上启动一个后台任务,它将返回200,并在后台运行一个任务以生成一个报告。在某个数据库表中会有一个条目指示任务是否完成或正在运行(取决于您如何实现),因此您可以查询get_csv
响应。您可以将现有的任务队列之一集成到您的django应用程序中:
我反对建议使用django-background-tasks和django-q,因为这些项目没有被维护。