2017-04-10 9 views
0

私は日付選択に基づいてcsvをエクスポートすることができるdjangoビューを持っています。ローカルではこの機能は正常に動作します。Django csv HttpResponseはローカルで作業中に壊れています

私はAzureでホストされているWebアプリケーションを持っています。

Azureでは、csv応答URLに404(見つかりません)というエラーが表示されます。 私の推測では、productionsまたはAzureでsettings.pyで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

ジャンゴ/ジャンゴギッターチャネル(@MBijmanに叫ぶ)におけるユーザの一人からいくつかの助けにこのおかげで解決しました。

URLでcsvエクスポートのデータを渡していたため、問題が発生していました。 私はデータにクッキーの値を設定するビューのコードを変更:

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 
関連する問題