包含django的xsendfile功能的包

django-giftbox的Python项目详细描述


Travis-CI badgeCodecov.io badge

说明

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魔术

如果安装了libmagicpython-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()时,您可以这样做。

测试

所有测试都可以使用toxpython setup.py pytest运行。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?   java将快速线程返回到池中,而不是等待慢速线程   创建jar文件时java SwingWorker不工作   java如何将依赖注入RabbitListener   java如何在gradle任务中通过scp复制目录?   java在MySql数据库中创建表时,遇到NullPointerException   java HTTP Status 500 Servlet执行引发异常   在JAVA中对arraylist使用继承时出错   java PowerMockito未完成存根异常   如果没有错误/警告增加到某个极限,java是否停止在eclipse中构建项目或使用maven?   java Robolectric如何测试DateFormat。getBestDateTimePattern()   google云平台GCP数据存储Java API,构建一个空值实体   VerifyListener和FocusListener之间的java冲突   安卓是否可以在Java中的另一个方法内部强制调用一个方法?   JavaWindows7、JDK1.8、SpringBoot应用程序JAR在方法安全性方面占用了大量时间。getProviders()返回   Bean提供程序的java错误消息   java Slick动画每帧必须有一个持续时间   java无法在Trie中设置isLeaf标志   java为什么JVM不能创建包含main方法的类的对象,以便从该类访问main方法,如果它具有该类的名称?   java Apache Camel+CXF端点身份验证