跳转到主要内容

具有细粒度访问控制的相册

项目描述

简介

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 syncgsutil rsync 等上传照片。

  • 第二个存储区域包含相册导出的缩放版本和 ZIP 存档。这是一个缓存。您可以设置过期策略并清除它,而不会影响画廊,除了重新缩放图像的成本。

myks-gallery 通过 Django 的 文件存储 API 访问它们,这意味着您可以使用任何存在 Django 存储后端的存储。如果您在云服务中存储文件,应使用第三方存储后端。

安装指南

此应用程序并非真正的即插即用。有许多可动部件。以下是集成 myks-gallery 到现有网站的一般过程

  1. 从 PyPI 下载并安装包

    $ pip install myks-gallery Pillow
  2. gallery.apps.GalleryConfig 添加到 INSTALLED_APPS

    INSTALLED_APPS += ['gallery.apps.GalleryConfig']
  3. 配置设置——下面是列表。

  4. 使用 gallery 应用程序命名空间将应用程序添加到您的 URLconf 中

    urlpatterns += [
        path('gallery/', include('gallery.urls', namespace='gallery')),
    ]
  5. 创建一个合适的 base.html 模板。它必须提供三个块:titleextraheadcontent,如本例中所示 示例

  6. 使用管理员中的“扫描照片”按钮或 scanphotos 管理命令扫描您的照片并定义访问策略。

包含示例应用程序,位于 example 目录中。它可以帮助您了解所有部件如何组合在一起。下面是如何运行它的说明。

访问控制

myks-gallery 提供两个级别的访问控制:按相册和按照片。

默认情况下,相册和照片对任何人都不可见,除非用户有“可以查看所有照片”的权限,包括隐式具有此权限的超级用户。

要使它们可见,您必须定义访问策略。您有两个选项:公开访问或限制为选定的用户或组的访问。

相册的访问策略在管理员中明确配置。

在大多数情况下,您将启用“照片继承相册访问策略”选项,以便访问策略也适用于相册中的所有照片。

照片的访问策略也可以进行细粒度配置。

例如,如果您只想在相册中发布几张照片,将这些照片设置为公开,将相册设置为公开,但不要启用“照片继承相册访问策略”。相册中的其他照片将不可见。

另一个例子,如果您想私享相册,但除了一些照片外,为这些照片设置空访问策略(例如,通过添加然后删除自己),然后允许某些组或用户查看相册。

权限

myks-gallery 为 django.contrib.auth 定义了两个权限

  • “可扫描照片目录”允许在管理后台使用“扫描照片”按钮。

  • “可查看所有照片”允许查看所有专辑和所有照片,不受访问策略的限制。

设置

运行示例应用程序

  1. 请确保已安装Django和Pillow。

  2. 创建用于存储照片和缩略图的目录

    $ cd example
    $ mkdir media
    $ mkdir media/cache
    $ mkdir media/photos
  3. 创建一个包含日期的相册目录,并下载图片。 维基百科的特色图片 是一个好的选择

    $ mkdir "media/photos/2023_01_01_Featured Pictures"
    # ... download pictures to this directory...
  4. 运行开发服务器

    $ ./manage.py migrate
    $ ./manage.py createsuperuser
    $ ./manage.py runserver
  5. 访问 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_DIRGALLERY_CACHE_DIR 设置的回退支持。

  • 删除了从本地文件系统私有提供文件的 支持,包括 GALLERY_SENDFILE_HEADERGALLERY_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_STORAGEGALLERY_CACHE_STORAGE 设置。它们取代了 GALLERY_PHOTO_DIRGALLERY_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 (35.3 kB 查看散列)

上传时间

构建分发

myks_gallery-0.9.1-py3-none-any.whl (39.8 kB 查看散列)

上传时间 Python 3

由以下机构支持