このようにビューにデータをリストするビューを作成しています
class DownloadView(ListView):
template_name = 'mytemplate.html'
今私のそのビューでは、ページがロードされたときに、そのビューでpdfファイルを生成し(私ができる)、ファイルの保存オプションでユーザーにプロンプトを表示する必要があります。どうやってやるの
djangoのドキュメントを確認してください。これにresponse['Content-Disposition']
は、が入力されていることが示さ'attachment; filename="somefilename.pdf"'
れていますが、PDFファイルのデータをに読み込んだ場合は、次のように機能する可能性がありますpdf_data
。
from django.http import HttpResponse
def serve_pdf_view(request):
pdf_data = magically_create_pdf()
return HttpResponse(pdf_data, content_type='application/pdf')
リクエスト中に PDF を生成したり、Django を使用して静的ファイルを提供したりすることはお勧めしません。
最善の策は、すべての PDF をフォルダーに保存し、Apache または Nginx を使用してそれらを提供し、コンテンツ タイプ ヘッダーを application/octet-stream に設定して、応答が保存されることを示すことです。
- 編集 -
PDFを動的に生成するのが正しい解決策だと思いますが、リクエスト中に行うのではなく、タスクキューを使用します。PDF を要求するユーザーを認証および承認する必要がある場合は、Django で行いますが、X-Accel (nginx)、X-Sendfile (apache)、または同等のものを使用して、Web サーバーに実際のファイルを提供するように指示します。
Django は静的ファイルを提供するためのものではありません。djangoのドキュメントを引用すると、「できるからといって、そうすべきだというわけではありません」。
リクエスト中に PDF を生成することは、ユーザーを待たせ、リクエストがタイムアウトする可能性があり、長時間実行されるリクエストがサーバーを拘束し、せっかちなユーザーが更新を (繰り返し) 行い、最後に DOS 攻撃面になるため、お勧めできません。