如何在python中的文件下载请求中调用某些函数?

时间:2012-10-09 05:51:10

标签: python python-3.x python-2.7

我是python的新手。我在瓶子或其他框架或python中存在一些库,我可以通过它处理文件下载,即我想开发代码,通过该代码我可以通过他需要指定的某些键来授权人员我键入url然后只能下载文件,否则他无法下载该文件。

简单地说我想调用一些在发出文件下载请求时调用的事件。文件下载请求我需要执行一些功能后文件下载开始。

1 个答案:

答案 0 :(得分:0)

你的问题有点难以理解,但如果我理解你想做什么,最好的办法就是不要在你的Python框架中寻找这个功能。这样做的原因是大多数框架 - 至少djangoflask,我已经使用过 - 不是为生产就绪服务器而构建的,主要用于服务动态网页模板和URL路由,以及其他服务器端功能。静态文件和媒体的传送通常最好由Apache,gunicorn等生产服务器完成。

这就是为什么,例如,在django docs中,它具体说:

  

Django本身不提供静态(媒体)文件,例如图像,   样式表或视频。它将该作业留给您的任何Web服务器   选择。

     

这里的原因是标准的Web服务器,例如Apache,   lighttpd和Cherokee,在静态服务方面更加精细   文件而不是Web应用程序框架。

您的服务器可能更好地处理这种身份验证,无论是Apache还是其他。

使用框架保护下载文件的一个选项是将真正的文件URL隐藏在另一个需要身份验证的文件后面,可能会将真实的URL更改为文件。这并不完美,绝对不能完全保护文件,但可能适合您。 django的示例:

# urls.py
...
url('/my/file/url', my_file_download_function),
...

# views.py
from django.shortcuts import redirect

def my_file_download_function(request):
    if request.GET.get('apikey', None) == CORRECT_API_KEY:
        return redirect('/real/URL/to/file')
    else:
        return HttpResponse(status=401)

同样,我不一定推荐这个,但这是使用框架进行此操作的一种选择。

<强>更新 仔细阅读了新发布的评论后,我认为您最好的选择是由 iMom0 发布,link关于在Django中提供静态文件之前进行身份验证。