python 如何让用户在django中下载JSON和CSV文件?

jyztefdp  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(161)

在我的Django项目中,我以JSON和CSV格式抓取数据。我想让用户下载JSON和CSV文件。
下面的代码在我的django项目目录中生成文件。

    • views. py**
final = json.dumps(sorted_result, indent=2)
with open("webscraping_dataset.json", "w") as outfile:
    outfile.write(final)

df = pd.DataFrame({"Name": name, "Price": price, "URL":URL})
df.to_csv("data.csv")

我应该如何在我的Django项目中实现它,以便用户可以下载这些文件?
谢谢。

u59ebvdq

u59ebvdq1#

如果您已经生成了CSV和JSON,我认为您需要首先在www.example.com中返回它们views.py:

final = json.dumps(sorted_result, indent=2)
with open("webscraping_dataset.json", "w") as outfile:
    outfile.write(final)

df = pd.DataFrame({"Name": name, "Price": price, "URL":URL})

csv_file = df.to_csv("data.csv")
json_file = "webscraping_dataset.json"

return csv_file, json_file

然后,您需要向www.example.com添加一个URLurls.py,以指向views.py:

from django.urls import path
from .views import download_files

urlpatterns = [
     path('download/', [NAME OF YOUR FUNCTION THAT RETURNS CSV & JSON]
 ]

当用户请求URL/download/时,它应该调用您的函数并返回生成的CSV和JSON。
这篇文章可能会提供更多的清晰度:https://www.etutorialspoint.com/index.php/252-django-generate-and-download-csv-file

dojqjjoe

dojqjjoe2#

a)通过HTML页面下载:

通常你会把这些生成的文件作为媒体文件处理(比如用户上传了一个用户图片等,你需要存储和提供它)。
在settings.py定义

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

MEDIA_ROOT = os.path.join(PROJECT_DIR, "media/")
MEDIA_URL = '/media/'

在视图中使用MEDIA_ROOT(可能会向MEDIA_ROOT添加一些子文件夹):

with open(os.path.join(settings.MEDIA_ROOT,"webscraping_dataset.json", "w") as outfile:
...

将MEDIA_ROOT添加到视图中的上下文:

context = {
    'media_url': settings.MEDIA_URL,
     ...
}
return render(request, '.../xxx.html', context)

在HTML中使用

<a href="{{media_url}}webscraping_dataset.json">

然后,您仍然需要关心媒体文件是由HTTP服务器提供的。
如果您在http.conf中使用Apache

Alias /media/ absolute_path_like_defined_as_MEDIA_ROOT

B)直接从视图下载:

如果你想直接从没有html页面的视图返回文件:
CSV

csv_output = df.to_csv("data.csv")
response = HttpResponse(csv_output, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=webscraping_dataset.csv'

return response

JSON:

final = json.dumps(sorted_result, indent=2)
return JsonResponse(final)

相关问题