gpt4 book ai didi

django - 在 Django FileResponse 保存后停止微调器

转载 作者:行者123 更新时间:2023-12-04 09:23:01 25 4
gpt4 key购买 nike

我有一个 url 的模板链接,该链接运行一个 View 函数,该函数生成一个文件并返回一个 FileResponse。效果很好,但如果生成文件可能需要一段时间,所以我想在前后启动和停止微调器。
我尝试在要运行的链接上使用单击事件和发送 url 的 $.ajax() 或 $.get() 函数,这样我就可以启动微调器。但是在这种情况下 FileResponse 不会生成保存窗口。 (代码如下)
有没有办法通过 JavaScript 在 Django View 中生成和保存文件?以下永远不会打开文件保存窗口。

$("#ds_downloads a").click(function(e){
urly='/datasets/{{ds.id}}/augmented/'+$(this).attr('ref')
startDownloadSpinner()
$.ajax({
type: 'GET',
url: urly
}).done(function() {
spinner_dl.stop();
})
})
在下面添加创建 FileResponse 的函数。这会生成一个本地系统文件保存窗口,允许用户在本地保存文件。打开或关闭(保存)该窗口的事件将是停止微调器的时间,但我似乎无法通过 javascript 访问它。
    with open(fn, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile, delimiter='\t',
quotechar='', quoting=csv.QUOTE_NONE)
writer.writerow(['col1','col2','col3'])
for f in features:
geoms = f.geoms.all()
gobj = augGeom(geoms)
row = [
gobj['col1'],
gobj['col2'],
gobj['col3']]
writer.writerow(row)
response = FileResponse(open(fn, 'rb'),content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="'+os.path.basename(fn)+'"'

最佳答案

只需使用 HttpResponse,浏览器会自动添加微调器。无需添加额外的微调器。

    from csv import writer
from django.http import HttpResponse
response = HttpResponse(content_type='text/csv')
response.status_code = 200
response["Content-Disposition"] = "attachment; filename={}".format(filename)
try:
csv_writer = writer(response)
# define headers
csv_writer.writerow(headers)
[csv_writer.writerow(row) for row in features.values_list(*headers)]
except Exception:
raise

return response

关于django - 在 Django FileResponse 保存后停止微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com