具有细粒度访问控制的相册
项目描述
简介
myks-gallery 是一个具有细粒度访问控制的简单相册。
它为我的 朴素相册 提供支持,使我能够
私密地访问我的整个照片收藏,
与家人或朋友共享一些专辑,
使一些专辑公开。
用例
我不用照片管理器,只为每个活动创建一个新的目录,并将照片放在里面。我在目录名称中包含活动的日期,并根据日期和时间重命名照片。然后我定期将我的收藏同步到远程存储。我从那里提供我的相册。
如果您有类似的流程,您可能会发现 myks-gallery 很有用。
每次我上传新照片时,我都会使用 django-admin scanphotos 或管理中的按钮重新扫描收藏。myks-gallery 检测到新的专辑和照片。然后我在管理中定义用户、组和访问策略。
相册访问策略控制相册的可见性。通常情况下,您会启用“照片继承相册访问策略”选项。如果您需要更多控制,例如仅共享相册的一部分,您可以禁用此选项并使用照片访问策略。您仍然需要定义相册访问策略,并且它应该是照片访问策略的超集。
显然,要求用户名和密码对于与亲人共享照片来说效果不佳。您可能想使用 django-sesame。
配置
myks-gallery 是一个可插入的 Django 应用程序。它需要
Django ≥ 3.2(LTS)
Python ≥ 3.6
架构
myks-gallery 需要两个存储区域
第一个存储区域包含原始照片。这是一个只读参考。您可以使用 aws s3 sync、gsutil rsync 等上传照片。
第二个存储区域包含相册导出的缩放版本和 ZIP 存档。这是一个缓存。您可以设置过期策略并清除它,而不会影响画廊,除了重新缩放图像的成本。
myks-gallery 通过 Django 的 文件存储 API 访问它们,这意味着您可以使用任何存在 Django 存储后端的存储。如果您在云服务中存储文件,应使用第三方存储后端。
安装指南
此应用程序并非真正的即插即用。有许多可动部件。以下是集成 myks-gallery 到现有网站的一般过程
从 PyPI 下载并安装包
$ pip install myks-gallery Pillow
将 gallery.apps.GalleryConfig 添加到 INSTALLED_APPS
INSTALLED_APPS += ['gallery.apps.GalleryConfig']
配置设置——下面是列表。
使用 gallery 应用程序命名空间将应用程序添加到您的 URLconf 中
urlpatterns += [ path('gallery/', include('gallery.urls', namespace='gallery')), ]
创建一个合适的 base.html 模板。它必须提供三个块:title、extrahead、content,如本例中所示 示例。
使用管理员中的“扫描照片”按钮或 scanphotos 管理命令扫描您的照片并定义访问策略。
源 包含示例应用程序,位于 example 目录中。它可以帮助您了解所有部件如何组合在一起。下面是如何运行它的说明。
访问控制
myks-gallery 提供两个级别的访问控制:按相册和按照片。
默认情况下,相册和照片对任何人都不可见,除非用户有“可以查看所有照片”的权限,包括隐式具有此权限的超级用户。
要使它们可见,您必须定义访问策略。您有两个选项:公开访问或限制为选定的用户或组的访问。
相册的访问策略在管理员中明确配置。
在大多数情况下,您将启用“照片继承相册访问策略”选项,以便访问策略也适用于相册中的所有照片。
照片的访问策略也可以进行细粒度配置。
例如,如果您只想在相册中发布几张照片,将这些照片设置为公开,将相册设置为公开,但不要启用“照片继承相册访问策略”。相册中的其他照片将不可见。
另一个例子,如果您想私享相册,但除了一些照片外,为这些照片设置空访问策略(例如,通过添加然后删除自己),然后允许某些组或用户查看相册。
权限
myks-gallery 为 django.contrib.auth 定义了两个权限
“可扫描照片目录”允许在管理后台使用“扫描照片”按钮。
“可查看所有照片”允许查看所有专辑和所有照片,不受访问策略的限制。
设置
GALLERY_PHOTO_STORAGE
默认值:未定义
Django存储类的点分Python路径,用于原始照片。它必须可由应用程序服务器读取,但不应该可写入。
尽管 GALLERY_PHOTO_STORAGE 的行为类似于Django的 DEFAULT_FILE_STORAGE 设置,但您通常将其指向一个初始化并返回Django存储实例的工厂函数,因为您不希望为诸如S3存储桶名称之类的设置使用全局配置的值。
GALLERY_CACHE_STORAGE
默认值:未定义
Django存储类的点分Python路径,用于存储调整大小后的版本和专辑存档。它必须可由应用程序服务器读取和写入。
其行为类似于 GALLERY_PHOTO_STORAGE。
GALLERY_PATTERNS
默认值: ()
定义如何从照片文件路径中提取专辑信息(类别、日期、名称)的(类别名称,正则表达式)元组。
正则表达式匹配相对于照片存储根目录的路径。它们包含以下捕获
a_name:专辑名称(必需)—— 要捕获多个部分,请使用 a_name1、a_name2、等等。
a_year、a_month、a_day:专辑日期(必需)
p_year、p_month、p_day、p_hour、p_minute、p_second:照片日期和时间(可选)
以下是一个示例,对于存储名为 2013/01_19_Snow in Paris/2013-01-19_19-12-43.jpg 的照片
GALLERY_PATTERNS = ( ('Photos', r'(?P<a_year>\d{4})/(?P<a_month>\d{2})_(?P<a_day>\d{2})_' r'(?P<a_name>[^_/]+)/' r'(?P<p_year>\d{4})-(?P<p_month>\d{2})-(?P<p_day>\d{2})_' r'(?P<p_hour>\d{2})-(?P<p_minute>\d{2})-(?P<p_second>\d{2})\.jpg'), )
GALLERY_IGNORES
默认值: ()
匹配 GALLERY_PHOTO_STORAGE 内部路径的正则表达式元组。与这些表达式匹配的文件在扫描照片时将被忽略。
GALLERY_RESIZE
默认值: gallery.resizers.pillow.resize
提供调整大小功能的可调用的点分Python路径。
resize(photo, width, height, crop=True) 接收一个 Photo 模型实例,并返回调整大小版本的URL。原始图像位于照片存储中的 photo.image_name。
默认实现依赖于 Pillow。
GALLERY_RESIZE_PRESETS
默认值: {}
将调整大小预设映射到(宽度,高度,裁剪)元组的字典。如果 crop 为 True,则照片将被裁剪,缩略图将具有请求的确切大小。如果 crop 为 False,则缩略图在其中一个维度上将小于请求的大小,以保持照片的宽高比。
默认模板假定以下值
GALLERY_RESIZE_PRESETS = { 'thumb': (128, 128, True), 'standard': (768, 768, False), }
您可以将这些大小加倍以获得高DPI显示器上的更好效果。
管理后台期望一个 'thumb' 预设。
GALLERY_RESIZE_OPTIONS
默认值: {}
将图像格式名称映射到Pillow的 save 方法的选项字典。Pillow的文档描述了每个文件格式的选项。
以下是一些高质量的缩略图和预览的合理值
GALLERY_RESIZE_OPTIONS = { 'JPEG': {'quality': 90, 'optimize': True}, }
默认调整大小器遵守此设置。其他调整大小器可能会忽略它。
GALLERY_TITLE
默认值: "图库"
您照片图库的标题。这仅用于索引视图和年视图的默认模板。
GALLERY_PREVIEW_COUNT
默认值: 5
每个专辑预览中显示的缩略图数量。
运行示例应用程序
请确保已安装Django和Pillow。
创建用于存储照片和缩略图的目录
$ cd example $ mkdir media $ mkdir media/cache $ mkdir media/photos
创建一个包含日期的相册目录,并下载图片。 维基百科的特色图片 是一个好的选择
$ mkdir "media/photos/2023_01_01_Featured Pictures" # ... download pictures to this directory...
运行开发服务器
$ ./manage.py migrate $ ./manage.py createsuperuser $ ./manage.py runserver
访问 http://localhost:8000/admin/gallery/album/ 并登录。点击右上角的“扫描照片”链接,以及下一页上的“扫描照片”按钮。您应该看到以下消息
正在扫描 path/to/myks-gallery/example/media/photos
将专辑 2023_01_01_Featured Pictures (Photos) 添加为特色图片
完成 (0.01秒)
访问 http://localhost:8000/ 并享受!
由于您以管理员用户登录,即使您尚未定义任何访问策略,也可以查看相册和照片。
变更日志
1.0
开发中
0.9
此版本允许通过 GALLERY_RESIZE 设置自定义图像缩放,例如集成外部服务。查看 gallery.resizers.thumbor.resize 以获取示例。
删除了一些针对在文件系统中存储文件而设计的功能
已删除 django-admin scanphotos 的 --resize 选项。
删除了具有 GALLERY_ARCHIVE_EXPIRY 设置的相册存档到期。请配置云存储服务上 export 文件夹的生命周期。
删除了对已弃用的 GALLERY_PHOTO_DIR 和 GALLERY_CACHE_DIR 设置的回退支持。
删除了从本地文件系统私有提供文件的 支持,包括 GALLERY_SENDFILE_HEADER 和 GALLERY_SENDFILE_PREFIX 设置。
还包括了一些小的更改。
已更新以支持 Django 4.0。
0.8
更改了照片访问策略,使其始终覆盖相册访问策略,即使启用了“照片继承相册访问策略”。这使得可以使用照片访问策略来限制访问,而不仅仅是扩展它。
已更新以支持 Django 3.0。
0.7
已更新以支持 Django 2.0。
0.6
添加了与 Django 1.9 兼容的迁移。
要升级现有项目,请运行: django-admin migrate --fake-initial。
0.5
此版本使用 Django 文件存储 API 对所有文件操作,使得可以使用 Amazon S3 或 Google Cloud Storage 等服务存储照片和缩略图。它引入了 GALLERY_PHOTO_STORAGE 和 GALLERY_CACHE_STORAGE 设置。它们取代了 GALLERY_PHOTO_DIR 和 GALLERY_CACHE_DIR。
在升级到 0.5 或更高版本时,您应该清除缓存目录。之前缓存的缩略图和导出将不会被此版本使用。
还包括了一些小的更改。
相册排序已更改为始终首先显示最新的相册。
允许自定义专辑预览中的照片数量。
在专辑预览中保留了照片的原始顺序。
在专辑预览页面上添加了分页。
更改了哈希方案。这会使缓存无效。您应该清除它。
修复了包含具有相同名称的照片的 zip 存档之间的冲突。
0.4
提供将专辑作为 zip 存档导出的功能。
修复了受批量访问策略更改影响的照片预览。
0.3
支持 Python 3 和 Django 1.6。
默认隐藏对登录用户可见的公共相册。
将默认样式更改为响应式设计。
为scanphotos添加了预计算缩略图的选项。
为scanphotos添加了重新同步照片日期的选项。
修复了照片日期中的错误。
0.2
将大多数设置设置为可选,以简化部署。
将“sendfile”设置为可选,并使用流式响应作为后备。
解决了在创建大JPEG预览时libjpeg崩溃的问题。
添加了许多测试。
0.1
首次公开发布,包含从我私人仓库的历史记录。
添加了文档(README文件)。
添加了一个示例应用程序。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
myks_gallery-0.9.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 0b49fb3ae85d4b319d256d5119bfdc10db67ddfac1dc9cac190c05fb8b812fac |
|
MD5 | 87bcbc2b3d450bfd03dc0bcd3d2b9556 |
|
BLAKE2b-256 | f439c0e5f112f05335e920d86a21aa80b28cab772c4aee4f6d16b3df8d757cdf |
myks_gallery-0.9.1-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | b9446461dc42ef3b974ccd743aecec7ea2651c0a77bb64b4a4c8da3afc2921fd |
|
MD5 | 18a3fd4f5d22de656edd19b160634c81 |
|
BLAKE2b-256 | 8481de8ee8792eabc9f166dcd8ccdffc9d4b685f8bb7ca78618d967f565d06e1 |