将Heroku服务器上的.csv文件复制到本地驱动器

时间:2019-09-16 08:23:29

标签: python django heroku-cli

我有一个部署到Heroku的Python / Django Web应用程序,该应用程序将信息写入.csv文件。

一旦文件被写入,我想将其从Heroku服务器下拉到用户本地驱动器。

我不需要在任何地方保存文件,因此避免使用S3或存储在数据库中。

我已经使用了Heroku的“ ps:copy”命令,但是确实可以确定,这是否意味着用户需要在其计算机上安装Heroku CLI才能正常工作?

还有其他方法吗?

3 个答案:

答案 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)