2017-04-10 65 views
0

我有一个django视图,它允许用户根据日期选择导出csv。本地这个功能工作正常。Django csv HttpResponse本地工作中破产

我有在Azure上托管的Web应用程序。

在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"), 

在天青生成的URL:

https://xyzxyz.azurewebsites.net/employees/report/export?csrfmiddlewaretoken=(..CSRF_TOKEN)&data=(...DATA)

的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> 

Waitress.py文件:

import os 
from waitress import serve 
from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "isi_django.settings") 
application = get_wsgi_application() 
serve(application, host="0.0.0.0", port=os.environ["PORT"], url_scheme='https') 
+0

404似乎没有考虑到一个错误。这取决于你如何将Web服务器与Django集成。发布你的webserver配置和'report'的完整视图代码 – itzMEonTV

+0

我上面编辑过,包含web.config文件。 – Bchadwick

回答

0

从Django的/ Django的小胶质通道(喊出@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 
相关问题