跳转到主要内容

更容易分享Wagtail草稿

项目描述

Build Status

wagtail-sharing

更容易分享 Wagtail 草稿。

Wagtail Sharing 可以让您更容易地与没有访问Wagtail管理站点的用户共享Wagtail草稿内容。它允许您定义一个替代主机名和/或端口,在该端口上公开所有Wagtail页的最新版本。

例如,假设您的Wagtail站点运行在 http://mysite.com。您已创建一个位于slug /path/to/draft 的草稿页面,但尚未发布。Wagtail Sharing 允许您在某个其他域名上公开该草稿页面,例如 http://sharing.mysite.com/path/to/draft

在另一个用例中,您可能有一个已发布的页面在 http://mysite.com/already/published/page,并且您已经对某些草稿进行了修改。Wagtail Sharing 允许您在 http://sharing.mysite.com/already/published/page 暴露这些草稿更改,同时在您的常规域名上保持相同的内容。

这些示例显然在您有一些方法来限制对 http://sharing.mysite.com 的访问时效果最佳,例如,仅通过私人网络公开该子域。

Wagtail Sharing 允许您为每个已定义的 Wagtail 站点创建独立的共享站点。它还支持共享页面上的可配置视觉横幅,以提醒审阅者内容可能与已发布的站点不同。

此新逻辑仅适用于 GET 请求。其他 HTTP 方法如 POST 将延迟到标准的 Wagtail 处理。

设置

使用 pip 安装包

$ pip install wagtail-sharing

wagtailsharing 添加到您的 Django 设置中已安装的应用程序

# in settings.py
INSTALLED_APPS = (
    ...
    'wagtailsharing',
    ...
)

wagtail.snippets 也需要,并且必须包含在您的已安装应用程序列表中。

以下代码示例假设您正在使用最新的 Wagtail 版本(3.0+)。

运行迁移以创建所需的数据库表

$ python manage.py migrate wagtailsharing

替换 Wagtail 的通配符 URL 模式

# in urls.py
-from wagtail import urls as wagtail_urls
+from wagtailsharing import urls as wagtailsharing_urls

...

-urlpatterns.append(url(r'', include(wagtail_urls)))
+urlpatterns.append(url(r'', include(wagtailsharing_urls)))

共享站点

Wagtail 管理现在在“设置”下有一个新的部分,称为共享站点,允许用户定义他们想要如何公开最新的页面修订。

Sharing sites

默认情况下,没有共享站点。必须为每个 Wagtail 站点手动创建共享站点才能使其最新的修订可共享。每个共享站点由一个唯一的域名和端口号定义。重要:不正确地配置共享站点可能会公开草稿/私密内容。设置时请小心!

创建新的共享站点

在遵循上述设置步骤之后,您应该能够创建一个新的共享站点,在本地 Django 开发服务器上使用此功能。假设您正在默认端口 8000 上运行本地开发服务器,并且那里的页面正在 http://localhost:8000 上提供服务。我们想在 http://sharing.localhost:8000 上创建一个新的共享站点,最新页面修订将在其中公开。

要模拟在不同主机名上访问您的站点,您需要放宽 Django 的默认安全设置,该设置仅允许在 localhost 上访问。编辑您的设置文件(例如 myproject/settings/local.py),添加以下内容

ALLOWED_HOSTS = ['*']

验证您是否可以访问本地服务器 http://sharing.localhost:8000。您应该在那里看到与 http://localhost:8000 上相同的内容,因为您尚未为默认站点启用 wagtail-sharing。

为此,在 Wagtail 管理中,在“设置”下的共享站点中,为默认站点创建一个新的共享站点,主机名为 sharing.localhost,端口号为 8000

New sharing site with site: "localhost [default]", hostname: "sharing.localhost", port: "8000"

现在,您的最新页面修订(包括草稿)应该在 http://sharing.localhost:8000 上可用。

横幅

在 wagtail-sharing 共享站点上查看的页面将添加一个简单的横幅,以提醒审阅者当前发布的内容可能与他们查看的内容不同。

Banner

可以通过设置 settings.WAGTAILSHARING_BANNER = False 来禁用此行为。横幅模板可以通过在 wagtailsharing/banner.html 提供替代模板文件来覆盖,类似于如何支持 wagtailadmin 模板覆盖

钩子

与正常页面服务一样,共享页面的服务继续遵守Wagtail内置的 before_serve_page 钩子。

本项目还添加了以下附加钩子

before_route_page

在路由时调用,在调用页面的 route() 方法之前。此钩子传递 request 和将对其调用 route() 的页面。如果可调用对象返回一个 HttpResponse,则将立即将该响应返回给用户。

此钩子允许对Wagtail的内置路由行为进行任何必要的自定义,例如支持 ShareableRoutablePageMixin

before_serve_shared_page

在即将调用页面的最新修订版本的 serve() 方法之前调用,在其 serve() 方法调用之前。与 before_serve_page 一样,此钩子传递页面对象、请求对象以及将传递给页面 serve() 方法的 argskwargs。如果可调用对象返回一个 HttpResponse,则将立即将该响应返回给用户。

此钩子可能有助于限制共享只限于某些页面类型,或在共享页面时修改页面内容。

from wagtail import hooks

@hooks.register('before_serve_shared_page')
def modify_shared_title(page, request, args, kwargs):
    page.title += ' (Shared)'

after_serve_shared_page

在调用页面的 serve() 方法之后,但在将响应返回给用户之前调用。此钩子传递页面对象和由 serve() 返回的响应对象。如果可调用对象返回一个 HttpResponse,则将立即将该响应返回给用户。

此钩子可能有助于直接修改响应内容,例如通过添加自定义头或修改生成的HTML。此钩子用于实现上面描述的通知横幅。

from wagtail import hooks

@hooks.register('after_serve_shared_page')
def add_custom_header(page, response):
    response['Wagtail-Is-Shared'] = '1'

混合

ShareableRoutablePageMixin

默认情况下,Wagtail的 RoutablePageMixin 与Wagtail-Sharing不兼容,相反,您需要使用 ShareableRoutablePageMixin 才能在可路由页面上查看共享草稿内容字段。

ShareableRoutablePageMixin 的使用方式与 RoutablePageMixin 完全相同。

from wagtail.fields import RichTextField
from wagtail.models import Page
from wagtail.contrib.routable_page.models import route
from wagtailsharing.models import ShareableRoutablePageMixin


class EventIndexPage(ShareableRoutablePageMixin, Page):
    intro = RichTextField()

    @route(r'^$')
    def current_events(self, request):
        # …

    @route(r'^past/$')
    def past_events(self, request):
        # …

兼容性

本项目已针对以下内容进行了兼容性测试

  • Python 3.9+

  • Django 3.2+

  • Wagtail 5.1+(有关对旧版Wagtail的支持,请参阅过去版本)

它应该与所有中间版本兼容。如果您发现它不兼容,请 提交问题

测试

运行项目单元测试需要 tox

$ tox

要交互式运行测试应用程序,请运行

$ tox -e interactive

现在您可以在浏览器中访问 http://localhost:8000/admin/ 并使用 admin / changeme 登录。

开源许可信息

  1. 条款

  2. 许可

  3. CFPB源代码政策

项目详情


下载文件

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

源代码分发

wagtail-sharing-2.12.1.tar.gz (18.4 kB 查看哈希值)

上传时间 源代码

构建分发

wagtail_sharing-2.12.1-py3-none-any.whl (25.5 kB 查看哈希值)

上传时间 Python 3

由以下支持