跳转到主要内容

一个Wagtail包,可加快并简化实现GraphQL端点的操作!

项目描述

A red g with a grapple hook

Wagtail Grapple

Build status Ruff PyPi pre-commit.ci status

一个易于构建GraphQL端点的库,让您可以从任何地方轻松处理Wagtail数据!

探索文档 » · 报告错误 · 请求功能

关于项目

Python和Django有各种GraphQL包。然而,要使这些包与现有基础设施无缝工作,而不出现错误,并不像看起来那么简单。

Grapple的目的是尽可能快地按模型模型地构建GraphQL端点。设置和配置已设计得尽可能简单,同时也提供最佳功能;无需编写复杂的序列化器 - 只需在您的模型中添加一个graphql_fields列表即可(尽管如果您想更深入地了解,也可以!)。

功能

  • 通过在模型中添加一个小注解,轻松创建GraphQL类型。
  • 支持传统的Wagtail模型
    • 页面(包括StreamField和Orderables)
    • 片段
    • 图片
    • 文档
    • 媒体(通过wagtailmedia
    • 设置
    • 重定向
    • 搜索(所有模型上)
  • 自定义图片和文档模型支持
  • 分页支持
  • 中间件支持

构建于

这个库是在Graphene和Graphene Django之上抽象出来的,并大量依赖它们。

入门

安装Grapple的设计尽可能简单!

先决条件

Python >= 3.8
Wagtail >= 5.2
Django >= 4.2

安装

使用pip安装

python -m pip install wagtail_grapple

将以下内容添加到您的Wagtail设置文件中的INSTALLED_APPS列表中

INSTALLED_APPS = [
    # ...
    "grapple",
    "graphene_django",
    # ...
]

将以下内容添加到相同的设置文件底部,其中每个键是要此库扫描的应用,值是要给GraphQL类型提供的名称前缀(您通常可以将其留空)

# Grapple config:
GRAPHENE = {"SCHEMA": "grapple.schema.schema"}
GRAPPLE = {
    "APPS": ["home"],
}

将GraphQL URL添加到您的urls.py

from django.urls import include, path
from grapple import urls as grapple_urls

# ...
urlpatterns = [
    # ...
    path("api/", include(grapple_urls)),
    # ...
]

完成!现在您可以继续配置模型,以生成采用其结构的GraphQL类型::tada: 您的GraphQL端点在http://localhost:8000/api/graphql/

用法

以下是从Wagtail文档中的默认页面获取的GraphQL模型配置示例

# ...
from grapple.models import GraphQLString, GraphQLStreamfield


class BlogPage(Page):
    author = models.CharField(max_length=255)
    date = models.DateField("Post date")
    body = StreamField(
        [
            ("heading", blocks.CharBlock(classname="full title")),
            ("paragraph", blocks.RichTextBlock()),
            ("image", ImageChooserBlock()),
        ]
    )

    content_panels = Page.content_panels + [
        FieldPanel("author"),
        FieldPanel("date"),
        StreamFieldPanel("body"),
    ]

    # Note these fields below:
    graphql_fields = [
        GraphQLString("heading"),
        GraphQLString("date"),
        GraphQLString("author"),
        GraphQLStreamfield("body"),
    ]

有关更多示例,请参阅文档

贡献

贡献使开源社区成为一个如此神奇的地方,可以学习、灵感和创造。您所做出的任何贡献都都受到高度赞赏

  1. 复制项目
  2. 创建您的功能分支(git checkout -b feature/amazing-feature
  3. 提交您的更改(git commit -m 'Add some amazing feature'
  4. 将更改推送到分支(git push origin feature/amazing-feature
  5. 打开拉取请求

本地开发

  • 在您选择的Python环境中,导航到tests/
  • 运行python -m pip install -r requirements.txt
  • 运行python manage.py migrate
  • 运行服务器python manage.py runserver
  • 运行测试python manage.py test

使用Postgres

  • 确保您有docker和docker compose
  • 运行docker compose up
  • 运行export DATABASE_URL="postgres://postgres:postgres@localhost/postgres"
  • 在您选择的Python环境中,导航到tests/
  • 运行python -m pip install -r requirements.txt
  • 运行python manage.py migrate
  • 运行服务器python manage.py runserver
  • 运行测试python manage.py test

兼容性

Wagtail Grapple支持

  • Python 3.8、3.9、3.10、3.11和3.12
  • Wagtail >= 5.2

许可证

在MIT许可证下分发。有关更多信息,请参阅LICENSE

灵感来源于

项目详情


发布历史 发布通知 | RSS源

下载文件

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

源分布

wagtail_grapple-0.27.0.tar.gz (38.9 kB 查看散列值)

上传时间

构建分布

wagtail_grapple-0.27.0-py3-none-any.whl (49.0 kB 查看散列值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面