python - 使用 Django : How to serve a file for download?

标签 python django django-class-based-views

首先让我说我在这方面花费了很多精力,此时任何意见对我来说都非常有值(value)。现在,回到我的问题:

我的工作:我的网站为用户提供了一个简单的界面来上传文件,他们将在其中获得一个 key 。该文件被保存到服务器, key 是使用现代安全加密算法生成的。这些细节对于手头的问题并不重要。

我要实现的内容:在下载页面上,用户可以输入 key ,文件就会下载到他们的计算机上。我想知道的是如何为用户提供下载上传文件的能力。简单的说,就是让用户可以下载MEDIA_ROOT文件夹下的一个文件。

我正在使用基于类的 View ,所以我的网址是:

urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings
from fileupload.views import FileDownloadView, GetFileView

urlpatterns = patterns('',
    url(r'^key/?$', FileDownloadView.as_view(), name='getkey'),
    url(r'^download/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}, GetFileView.as_view()),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

请提供我应该在我的 View 中使用哪些函数来实际下载文件的基本概念。我仍在开发中,所以我想利用 Django 的文件服务能力,而不是 Apache 的。如果我投入生产,我会考虑其他选择。无论我需要发布什么代码,我都可以发布。

谢谢!

最佳答案

如果 key 授予他们访问文件的权限,为什么不将 key 作为文件名呢?也就是说,上传文件时,创建一个长 key (比如 64 个字符长)并将文件重命名为 key 名称。然后在请求时使用 static.serve 方法简单地提供该文件。

这种方法的好处是:1) 您不需要将 key 映射到数据库中的文件,以及 2) 您不需要在检索文件时验证 key 。如果找到文件名,则 key 有效。

关于python - 使用 Django : How to serve a file for download?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927545/

相关文章:

python - Google App Engine 教程中的这段代码发生了什么

sql - 为了创建高质量的 Django 应用程序,我需要了解哪些关于数据库的知识?

python - django-braces 访问 mxin 每个 mixin 不同的 login_url 重定向

python - Django CreateView - 仅显示外键字段中的特定对象

基于 Django 类的通用 View 和身份验证

python - 如何分离数组并根据数组中的索引添加它们?

python - 在多对多关系中添加记录会导致 sqlalchemy 中出现重复错误

php - Docx 到 pdf 使用 openoffice headless 方式太慢

python - 即使我可以使用凭据进行 SSH,Fabric 也会要求输入密码

python - query_set 中的 values_list() 只显示数字而不显示国家名称