Django REST Framework接口如何返回CSV文件及外部API数据
实现接口返回CSV文件内容
你可以直接在现有的HomeViewSet中新增自定义Action实现CSV导出,步骤如下:
- 先导入依赖模块:
import csv from django.http import HttpResponse from rest_framework.decorators import action
- 在
HomeViewSet类中添加导出CSV的方法:
class HomeViewSet(viewsets.ModelViewSet): queryset = TmaskMda02.objects.using('tec').all() serializer_class = HomeSerializer permission_classes = [permissions.IsAuthenticated] # 新增导出CSV的Action @action(methods=['get'], detail=False, url_path='export-csv') def export_csv(self, request): # 指定响应类型为CSV,设置编码兼容Excel response = HttpResponse(content_type='text/csv; charset=utf-8-sig') # attachment表示触发下载,inline表示直接在浏览器展示内容 response['Content-Disposition'] = 'attachment; filename="mda00_data.csv"' # 写入CSV表头 writer = csv.writer(response) writer.writerow(['id', 'uuid', 'filename', 'log', 'timestamp', 'sha256', 'import_field', 'export', 'params']) # 写入数据行 for item in self.get_queryset(): writer.writerow([ item.id, item.uuid, item.filename, item.log, item.timestamp, item.sha256, item.import_field, item.export, item.params ]) return response
配置完成后访问路由{你的API前缀}/home/export-csv即可获取CSV文件。
实现展示第三方外部API的数据
可以通过请求库代理第三方API的返回结果,步骤如下:
- 先安装请求依赖:
pip install requests
- 导入依赖并在
HomeViewSet中新增代理Action:
import requests from rest_framework.response import Response from rest_framework import status class HomeViewSet(viewsets.ModelViewSet): # 原有代码保持不变 queryset = TmaskMda02.objects.using('tec').all() serializer_class = HomeSerializer permission_classes = [permissions.IsAuthenticated] # 新增第三方API代理Action @action(methods=['get'], detail=False, url_path='external-data') def external_data(self, request): # 替换为你要请求的第三方API地址 target_api_url = "第三方API的请求地址" try: # 可根据第三方API要求添加请求头、鉴权参数、查询参数等 resp = requests.get( target_api_url, timeout=10, # headers={"Authorization": "Bearer 你的鉴权令牌"} 按需添加 ) resp.raise_for_status() # 可在此处对第三方返回的数据做二次加工后再返回给前端 return Response(resp.json(), status=status.HTTP_200_OK) except requests.exceptions.RequestException as e: return Response( {"error": "第三方API请求失败", "detail": str(e)}, status=status.HTTP_503_SERVICE_UNAVAILABLE )
如果需要降低第三方API的调用频率,可以搭配Django自带的缓存框架对返回结果做缓存,提升接口响应速度。
内容的提问来源于stack exchange,提问作者TMask
相关产品推荐
相关产品推荐

