我的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文件)。下载的文件也不包含任何调试信息。
如何分析此文件下载的效果?
答案 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 年。