Python Django csv HttpResponse在生产过程中局部工作中断

Python Django csv HttpResponse在生产过程中局部工作中断,python,django,csv,azure,Python,Django,Csv,Azure,我有一个django视图,允许用户根据日期选择导出csv。在本地,此功能运行良好 我将web应用程序托管在Azure上 在Azure中,csv响应URL上出现404(未找到)错误。 我想我需要在settings.py中为生产或Azure中更改一些内容,以允许csv下载 查看代码: def report(request): if request.method == "POST": ... do some stuff

我有一个django视图,允许用户根据日期选择导出csv。在本地,此功能运行良好

我将web应用程序托管在Azure上

在Azure中,csv响应URL上出现404(未找到)错误。 我想我需要在settings.py中为生产或Azure中更改一些内容,以允许csv下载

查看代码:

    def report(request):
       if request.method == "POST":
           ...
         do some stuff
           ...

       else:          
            if 'emp-csv' in request.GET:
            # data from date selection
            data = request.GET['data']
            # Convert string to list
            cleandata = ast.literal_eval(data)
            # creating csv response
            response = HttpResponse(content_type="text/csv")
            response['Content-Disposition'] = "attachment; filename='hours_report.csv'"
            # Write data to csv file and return
            fieldnames = ['Supervisor', 'EmployeeID', 'FirstName', 'LastName', 'NT', 'OT', 'OT2', 'Project', 'Client', 'date']
            writer = csv.DictWriter(response, fieldnames=fieldnames, dialect='excel', )
            writer.writeheader()
            writer.writerows(cleandata)

            return response
URL代码:

url(r'employees/report/export', hours_views.report, name="export_csv"),
Azure中生成的URL:

web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <handlers>
   <add name="httpPlatformHandler" path="*" verb="*"
         modules="httpPlatformHandler" resourceType="Unspecified" />
  </handlers>

  <httpPlatform processPath="D:\home\Python27\python.exe"
 arguments="run_waitress_server.py" requestTimeout="00:04:00" 
  startupTimeLimit="120" startupRetryCount="3" stdoutLogEnabled="true">
   <environmentVariables>
    <environmentVariable name="PYTHONPATH" value="D:\home\site\wwwroot" />
    <environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" />
   </environmentVariables>
  </httpPlatform>
 </system.webServer>
</configuration>

多亏了Django/Django gitter频道(向@MBijman呼喊)中一位用户的帮助,这个问题才得以解决

在URL中传递csv导出数据是导致问题的原因。 我更改了视图代码,为数据设置了cookie值:

request.session['emp-data'] = emp_data
然后我将csv导出分离到一个新视图中:

@login_required
def csv_report(request):
# If request is for Excel report
if request.method == 'GET':
    if 'emp-csv' in request.GET:
        # data from date selection
        data = request.session['emp-data']
        # creating csv response
        response = HttpResponse(content_type="text/csv")
        response['Content-Disposition'] = "attachment; filename='hours_report.csv'"
        # Write data to csv file and return
        fieldnames = ['Supervisor', 'EmployeeID', 'FirstName', 'LastName', 'NT', 'OT', 'OT2', 'Project', 'Client',
                  'date']
        writer = csv.DictWriter(response, fieldnames=fieldnames, dialect='excel', )
        writer.writeheader()
        writer.writerows(data)

        return response

404看起来不是一个错误。这取决于如何将webserver与django集成。发布我在上面编辑的包含web.config文件的
报告的webserver配置和完整视图代码。
@login_required
def csv_report(request):
# If request is for Excel report
if request.method == 'GET':
    if 'emp-csv' in request.GET:
        # data from date selection
        data = request.session['emp-data']
        # creating csv response
        response = HttpResponse(content_type="text/csv")
        response['Content-Disposition'] = "attachment; filename='hours_report.csv'"
        # Write data to csv file and return
        fieldnames = ['Supervisor', 'EmployeeID', 'FirstName', 'LastName', 'NT', 'OT', 'OT2', 'Project', 'Client',
                  'date']
        writer = csv.DictWriter(response, fieldnames=fieldnames, dialect='excel', )
        writer.writeheader()
        writer.writerows(data)

        return response