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

Django Rest Framework POST生成CSV后重定向下载失败求助

问题:POST生成CSV后重定向GET下载失败,触发原POST URL的GET请求

问题背景

直接在POST方法中返回FileResponse/HttpResponse无法触发文件下载;单独调用GET接口可正常下载文件,但无法接收输入参数。因此采用POST请求生成文件→重定向到GET请求完成下载的方案,但执行后出现异常。

代码实现

views.py

import os
import pandas as pd
import numpy as np
import tensorflow as tf
from .apps import ApiConfig
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from django.http import HttpResponse
from django.urls import reverse
from django.http import HttpResponsePermanentRedirect
from django.shortcuts import redirect


class PerfPrediction(APIView):
    def post(self, request):
        request.session['_old_post'] = request.POST

        data = request.data
        alt = data['alt']
        mach = data['mach']
        zxn = data['zxn']
        os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
        model = ApiConfig.model

        inputs = np.array([[alt, mach, zxn]]).astype(np.float64)
        
        pd.DataFrame(model.predict(inputs)).to_csv('out.csv')
       
        return redirect(reverse("save_file"), permanent=True)


class Download(APIView):
    def get(self, request):
        response = HttpResponse(open('out.csv', 'rb').read(), content_type='text/csv')
        response['Content-Length'] = os.path.getsize('out.csv')
        response['Content-Disposition'] = 'attachment; filename=%s' % 'rf.csv'

        return response

urls.py

from django.urls import path
from .views import PerfPrediction
from .views import Download


urlpatterns = [
    path('perf/', PerfPrediction.as_view(http_method_names=['post']), name="perf_prediction"),
    path('perf/download/', Download.as_view(http_method_names=['get']), name="save_file"),
]

异常现象

  • 直接访问/perf/download/时,文件可正常下载,日志如下:
"GET /v1/api/perf/download HTTP/1.1" 301 0
"GET /v1/api/perf/download/ HTTP/1.1" 200 111
  • 通过/perf/提交POST请求后,日志显示:
"POST /v1/api/perf/ HTTP/1.1" 301 0
"GET /v1/api/perf/download/ HTTP/1.1" 200 111
Method Not Allowed: /v1/api/perf/
"GET /v1/api/perf/ HTTP/1.1" 405 5362

重定向后的GET请求返回状态码200,但文件并未触发下载,且后续系统会向原POST URL发送GET请求,返回405 Method Not Allowed错误。尝试使用HttpResponsePermanentRedirect替代redirect后问题依旧。

内容的提问来源于stack exchange,提问作者Aviral Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:41