包含django的xsendfile功能的包
django-giftbox的Python项目详细描述
说明
django giftbox是django web框架的一个应用程序,它提供了一个简单的 apache中x-sendfile功能的包装器。
这允许用户通过不允许下载文件来保护文件 直接,但允许django以编程方式发送重定向并让 Web服务器处理事务。
当前的实现与django 1.11+兼容(通过LTS测试 包括2.2)和py2/3兼容的版本。
唯一需要的依赖项是django本身和mod_xsendfile安装用于 阿帕奇。
安装
您只需使用pip从pypi下载即可:
pip install django-giftbox
安装额外的python-magic功能:
pip install django-giftbox[magic]
在许多linux发行版上,您需要有libmagic(或libmagic-dev) 安装后使用,否则python-magic将中断。
或者可以从master分支克隆:
pip install git+https://github.com/bwhicks/django-giftbox.git@master#egg=giftbox
就这样。
配置
礼品盒有两种“模式”。其中之一是dev,这是 使用django开发服务器运行时的默认值。礼品盒应自动检测 然后相应地运行。
另一个是prod,它假设您正在通过 像apache这样的web服务器
在djangosettings.py中,定义一个名为GIFTBOX_SETTINGS的字典。 必须定义doc_root,这是目录 你想要的文件 通过Giftbox提供USAGEO服务。这可能是一个亲戚 vhost的doc根目录下的路径或绝对文件路径。
也可以在运行时指定这些值,但必须至少有GIFTBOX_SETTINGS 其中一个设置有一些正常的默认值:
GIFTBOX_SETTINGS = { 'type': 'prod', # will still detect dev server locally 'doc_root': '/path/to/protected/files', }
vhost或其他配置中相应的apache条目是:
XSendFile on XSendFilePath /path/to/protected/files
这样做的主要优点是可以阻止对此路径的常规访问 或者把它放在apache的docroot之外。
可选的python魔术
如果安装了libmagic和python-magic,giftbox将设置 Content-Type向http服务器传递信息时的头。如果你 不需要此功能(快速或大文件服务),您可以 禁用它,将应用http服务器的mime处理:
GIFTBOX_SETTINGS = { # other settings... 'use_magic': False, }
在视图或视图函数中,按如下方式创建实例:
from gitfbox import GiftBox def my_view_func(request): box = GiftBox(request) return box.send('filename')
box在本例中是GiftBox的一个实例,它可以有自己的self.kwargs 以任何方式修改dict,并通过其构造函数传递kwargs。 默认情况下,它的默认值是settings.py。
box.send()返回^{tt21}的实例$ (或FileResponse)与 设置适当的头并清除Content-Type,以便您的web服务器 可以使用自己的mime处理来适当地设置类型(除非使用 可选的python-magic功能)。你可以手动 在返回HttpResponse对象之前也要指定这个。
所有这些都取决于apache的正确服务器设置 正确创建允许发送文件类型请求的受保护URL。
对象允许在任意点上几乎每个KWAG的灵活设置。如果 您需要动态地设置doc\u根 实例化该框,或者当您调用Giftbox.send()时,您可以这样做。
测试
所有测试都可以使用tox或python setup.py pytest运行。