跳转到主要内容

一个简单的Django应用程序,用于提供受保护的媒体

项目描述

Build Status

Django Protected Media

Django Protected Media是一个Django应用程序,用于以受保护的方式管理被认为是敏感的媒体。

不仅媒体存储在单独的文件系统位置,而且还需要授权才能访问。

该应用程序允许设置Django执行授权,但将文件服务交给Web服务器,如Nginx。

快速入门

  1. 将"protected_media"添加到您的INSTALLED_APPS设置中,如下所示
INSTALLED_APPS = [
    ...
    'protected_media.apps.ProtectedMediaConfig',
]
  1. 在您的项目urls.py中包含URLconf,如下所示:
path('protected/', include('protected_media.urls')),
  1. 如果需要调整默认设置,请将以下设置添加到settings.py
PROTECTED_MEDIA_ROOT = "%s/protected/" % BASE_DIR
PROTECTED_MEDIA_URL = "/protected"
PROTECTED_MEDIA_SERVER = "nginx"  # Defaults to "django"
PROTECTED_MEDIA_LOCATION_PREFIX = "/internal"  # Prefix used in nginx config
PROTECTED_MEDIA_AS_DOWNLOADS = False  # Controls inclusion of a Content-Disposition header
  1. 在您的模型中使用新的字段类
from protected_media.models import ProtectedImageField, ProtectedFileField

def SomeModel(models.Model):
    document = ProtectedFileField(upload_to="uploads/")
    picture = ProtectedImageField(upload_to="uploads/")
    # Files will be stored under PROTECTED_MEDIA_ROOT + upload_to

概述

Django根据以下定义管理媒体

BASE_DIR = "/some/application/dir/"
MEDIA_ROOT = "%s/media/" % BASE_DIR
MEDIA_URL = "/media/"

文件和图片字段通常定义为

document = models.FileField(upload_to="uploads/")
picture = models.ImageField(upload_to="uploads/")
# Files will be stored under MEDIA_ROOT + upload_to

在典型的生产环境中,通常会使用nginx(或其他服务器)来服务媒体

# Publicly accessible media
location ^~ /media/ {
    alias /some/application/dir/media
}

当媒体应公开访问时,这工作得很好。然而,如果媒体需要受到保护,我们需要一种方式让Django检查对媒体请求是否仅允许已登录(或更严格的条件)的用户。

protected_media应用程序

protected_media应用程序由以下内容组成:

  • 新的settings.py属性,
  • 自定义的FileSystemStorage类,
  • 自定义的受保护媒体URL处理程序,以及
  • 如果通过nginx或类似服务器提供服务的额外Web服务器配置。

受保护媒体存储在与公开可访问媒体不同的物理位置。您可以在settings.py中指定以下设置:

PROTECTED_MEDIA_ROOT = "/some/application/dir/protected/"
PROTECTED_MEDIA_URL = "/protected"
PROTECTED_MEDIA_SERVER = "nginx"  # Defaults to "django"
PROTECTED_MEDIA_LOCATION_PREFIX = "/internal"  # Prefix used in nginx config

在定义需要受保护的文件或图片字段时,我们使用protected_media应用程序提供的类之一

  • ProtectedFileField
  • ProtectedImageField

受保护的文件和图片字段通常定义为

document = ProtectedFileField(upload_to="uploads/")
picture = ProtectedImageField(upload_to="uploads/")
# Files will be stored under PROTECTED_MEDIA_ROOT + upload_to

这些类具有自定义存储后端ProtectedFileSystemStorage,它管理受保护媒体的文件系统位置和URL。

当使用nginx时,配置必须更新为如下所示:

# Publicly accessible media
location /media  {
    alias /some/application/dir/media;
}

# Protected media
location /internal  {
    internal;
    alias /some/application/dir/protected;
}

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-protected-media-1.0.2.tar.gz (6.5 kB 查看哈希值)

上传时间

由以下机构支持