You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework接口如何返回CSV文件及外部API数据

实现接口返回CSV文件内容

你可以直接在现有的HomeViewSet中新增自定义Action实现CSV导出,步骤如下:

  1. 先导入依赖模块:
import csv
from django.http import HttpResponse
from rest_framework.decorators import action
  1. 在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的返回结果,步骤如下:

  1. 先安装请求依赖:
pip install requests
  1. 导入依赖并在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:15:03