6

私の Django webapp では、ユーザーはオンザフライで生成されたテキスト ファイルをダウンロードできます。

response = HttpResponse(my_file_contents)
response['Content-Disposition'] = 'attachment; filename="my file.txt"'
return response

Django Debug Toolbar (0.11.0、1.0.1 を動作させることができないため) をインストールしましたが、クリックしてダウンロードを行うと、ダウンロードされたファイルに関する情報がツールバーに表示されません。ページ/リクエスト (または、HTML 以外のファイルである可能性があります)。ダウンロードしたファイルには、デバッグ情報も含まれていません。

このファイル ダウンロードのパフォーマンスをプロファイルするにはどうすればよいですか?

4

3 に答える 3

4

DB クエリのプロファイリングに重点を置いている場合の代替の一時的な解決策は、単にファイル ダウンロードの応答を返さず、代わりにテンプレートをロードすることです (アプリケーション内の有効な Django テンプレートはすべて動作するはずです)。DDT は引き続きすべてのクエリをログに記録し、次のページでそれらを確認できます。多くの場合、関心があるのは、ダウンロードの準備をしているデータを構築するために行われるクエリであるため、これは機能します。すでに手元にあるデータを取得して応答を返す実際のプロセスは、通常、非常に迅速です。

このダウンロードをリクエストできるフォームがあるとします。通常、ビューは次のようなものを返します。

# (Do something here to collect data)
response = HttpResponse(export_data, content_type=content_type)
response['Content-Disposition'] = 'attachment; filename=somefile.txt'
return response

これをコメントアウトして、代わりに通常のレンダリングされたテンプレートを返すだけです。表示したくない場合は、データを表示する必要はありません。TemplateView や FormView などの mixin を使用している場合、上記をコメントアウトするだけで、Django はダウンロード アクションが実行されていないかのようにテンプレートをレンダリングします。または、アプリケーションで任意の Django テンプレートをレンダリングするだけです。ここで、DDT ツールバーを開きます。すべてのクエリがあります。

于 2018-12-21T22:22:32.623 に答える