我有一个部署到Heroku的Python / Django Web应用程序,该应用程序将信息写入.csv文件。
一旦文件被写入,我想将其从Heroku服务器下拉到用户本地驱动器。
我不需要在任何地方保存文件,因此避免使用S3或存储在数据库中。
我已经使用了Heroku的“ ps:copy”命令,但是确实可以确定,这是否意味着用户需要在其计算机上安装Heroku CLI才能正常工作?
还有其他方法吗?
答案 0 :(得分:0)
这应该可以解决问题。发送到csv_view时,Django会生成CSV并自动将其下载到客户端的浏览器。
您提供的代码:
# Generate report filename
filename = djqscsv.generate_filename(qs, append_datestamp=True)
# Generate report
try:
with open(filename, 'ab') as csv_file:
print(filename)
write_csv(qs, csv_file)
messages.success(request, 'Consultation added to report successfully!')
messages.warning(request, 'Note: Certain needs may not appear in report, \
this is a result of filtering process.')
您需要将此代码与我的代码合并到同一视图中。
def csv_view(request):
filename = djqscsv.generate_filename(qs, append_datestamp=True)
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="{}.csv"',format(filename)
writer = csv.writer(response)
writer.writerow(qs) #use a for loop if you have multiple rows
messages.success(request, 'Consultation added to report successfully!')
messages.warning(request, 'Note: Certain needs may not appear in report, \
this is a result of filtering process.')
return response
请明确说明,csv_view
是生成CSV的地方,而不仅仅是到另一个视图中生成的CSV的链接。
此方法也不会将CSV保存到Dyno。我以为确实如此,之后才将其删除,但我认为它永远不会将其保存到服务器。
答案 1 :(得分:0)
我粘贴了下面的代码,该代码当前使用与Django QuerySets一起使用的djqscsv库生成.csv:
# Generate report filename
filename = djqscsv.generate_filename(qs, append_datestamp=True)
# Generate report
try:
with open(filename, 'ab') as csv_file:
print(filename)
write_csv(qs, csv_file)
messages.success(request, 'Consultation added to report successfully!')
messages.warning(request, 'Note: Certain needs may not appear in report, \
this is a result of filtering process.')
因此,一旦编写了“ csv_file”,我将重定向到上述的“ csv_view”,显然无需再写其他行了?
答案 2 :(得分:0)
发现djqscsv库包含了render_to_csv_response可以解决此问题:
# Generate file name from QuerySet
filename = djqscsv.generate_filename(qs, append_datestamp=True)
# Autodownload csv file in browser
return render_to_csv_response(qs, filename=filename)