Django调试工具栏:如何配置文件下载?

时间:2014-02-04 08:02:05

标签: python django django-debug-toolbar

我的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文件)。下载的文件也不包含任何调试信息。

如何分析此文件下载的效果?

3 个答案:

答案 0 :(得分:2)

如果您专注于对数据库查询进行概要分析,则另一种临时解决方案是不返回文件下载响应,而是加载模板(应用程序中的任何有效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工具栏-有了所有查询!

答案 1 :(得分:1)

您是对的,这是调试工具栏无法帮助您的情况之一。我建议使用日志文件来计算您的请求时间。例如,如果您使用的是Nginx,则可以使用adding extra information to log files的语法。例如,以下行添加了每个请求的响应时间:

log_format timed_combined '$remote_addr - $remote_user [$time_local]  '
      '"$request" $status $body_bytes_sent '
      '"$http_referer" "$http_user_agent" '
      '$request_time $upstream_response_time $gzip_ratio';

如果您更喜欢Django应用解决方案,可以查看django-timelog

答案 2 :(得分:0)

您可以使用 django-debug-toolbar-force

它允许您通过附加 ?debug-toolbar 强制为任何网址呈现模板。

这使您可以在开发期间访问工具栏及其所有工具以查看任何视图,而无需更改任何代码。

警告:我不确定到目前为止它的维护情况如何,最后一次提交是在 2020 年。