首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用wget这样的模块让用户在django上下载文件是错误的吗?

使用wget这样的模块让用户在django上下载文件是错误的吗?
EN

Stack Overflow用户
提问于 2021-05-31 21:39:33
回答 1查看 27关注 0票数 0

我正在开发一个django应用程序,用户可以在其中下载自己的文件。我需要确保文件的安全,并且只让它们下载。

一开始,我在考虑使用像这样的东西

代码语言:javascript
运行
复制
{%if files%}
<a href='/media/files/pics/photo.png' download>

然后我意识到,任何人都可以暴力破解我的网站并获取任何文件。所以我想到了通过视图来处理下载。我是一个非常新手,不知道如何使我自己的下载视图。所以我使用了类似这样的东西:

在views.py

代码语言:javascript
运行
复制
def download(id):
    file = data.objects.get(pk=id)
    url = file.fileurl
    filename = wget.download(url)

并在用户想要下载文件时调用该函数。我使用的是wget模块。我想我做错了,所以我决定征求一些建议。

最后我的问题是:使用其他模块下载文件是错误的吗?或者如何在Django上编写下载视图?

谢谢你!!

EN

回答 1

Stack Overflow用户

发布于 2021-05-31 21:53:44

如何在Django中下载文件取决于您的需求。任何可以下载和存储文件的库都应该没问题。另一方面,如何为其他用户提供服务则是另一回事。

正如您所提到的,您需要URL是私有的,以便只有授权用户才能下载文件。在这种情况下,您可以设置一个视图并授权用户,然后让您的set服务器知道它应该为该用户提供特定的文件。

如果你使用的是Nginx,你可以使用X-Accel-Redirect。其他web服务器,如Apache,也有一个类似的选项,名为X-Sendfile

看看这里的nginx示例:Django and Nginx X-accel-redirect

至于保存文件,您应该将文件保存在某个位置,并将该文件的路径存储在数据库中,然后将其链接到用户(例如,使用外键),并且只允许文件的所有者下载该文件。值得一提的是,下载文件可能需要很长时间,所以最好在下载文件的过程中使用后台任务,并允许用户在下载完成后开始下载。你可以看看Celery的后台任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67774875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档