【问题标题】:Can I use Wagtails API to power multiple sites from a single API endpoint?我可以使用 Wagtails API 从单个 API 端点为多个站点提供支持吗?
【发布时间】:2019-10-11 16:57:44
【问题描述】:

在此示例中,wagtail 部署到 cms.example.com 并作为无头 CMS 管理 foo.example.com 和 bar.example.com 的内容。

访问 cms.example.com/api/pages/ 上的 Pages API 时,仅返回当前活动站点 (cms.example.com) 的页面。

要获取“foo”和“bar”网站的内容,cms.example.com/api/ 还需要以 foo.example.com/api/ 和 bar.example.com/api/ 的形式提供(例如使用代理)。

是否可以通过 API 查询其他网站的页面而无需通过某些代理?

【问题讨论】:

    标签: api wagtail multiple-sites headless-cms


    【解决方案1】:

    Wagtail 的 API 是 Django Rest Framework 之上的一个相当薄的层,您应该感到鼓励自定义它或自行开发。

    当前站点过滤页面发生in the PagesAPIEndpoint.get_queryset method,禁用该行为的最简单方法是子类PagesAPIEndpoint 以覆盖该方法,并在urls.py 中注册您的自定义子类来代替原来的。

    【讨论】:

    • 这将涉及复制get_queryset 的整个主体,为了可维护性我想避免这样做。还有child/descendant_of 过滤器,它们也仅限于当前站点。如果我能以某种方式覆盖request.site,那就太好了,而不是通过不同的主机名(例如一些参数或标题)访问该站点
    • 编写自定义SiteMiddleware 使用get_site_for_hostname 根据当前主机名以外的其他内容设置当前站点似乎要容易得多
    • 在您的情况下,您不必复制 get_queryset 的整个正文。你必须用 return Page.objects.all().public().live() 替换它,afaik 可以满足你的需要。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 2022-08-21
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多