Если у вас появилась потребность добавить React в Wagtail CMS, да еще и с использованием GraphQL, то это руководство должно помочь вам в этом.

Это перевод статьи из официального блога Wagtail, автор Brent Clark.
Возможность интегрировать Wagtail CMS (Django) с существующими моделями сайта на уровне GraphQL означает, что мы могли бы использовать наши существующие вызовы API внутри статей блога используя немного больше, чем ForeignKey и небольшой преобразователь.
Требуется:
Начнем создание стандартного блога:
Добавьте приложение для блога:
Обновите blog/models.py со следующим содержимым:
Для реализации связки Wagtail CMS (Django) и GraphQL используем Graphene.
Примечание: Это решение универсальное для многих Django проектов благодаря пакету «Graphene-django»
Установите Graphene:
Настройка Graphene:
Добавьте параметр GRAPHENE в base.py
Добавьте приложение API:
Создайте в корневой папке сайта mysite, папку с названием api
Добавить apps.py
Создайте файл apps.py внутри новой папки api и вставьте туда следующее:
Добавить schema.py
Создайте еще один файл schema.py внутри папки api с указанным ниже содержимым:
Настройка URL-адресов
Добавьте два новых импорта в ваш urls.py файл.
Добавьте два новых URL-адреса в ваш urls.py файл, чуть выше адресов Wagtail.
Добавьте новые приложения в настройки:
Зафиксируйте изменения:
Если все было сделано правильно и не появилось ошибок, то запустите локальный сервер:
Создайте новую запись в блоге:
Тестирование GraphQL:
Перейдите в http://localhost:8000/api/graphiql и выполните запрос показанный ниже:
Вы должны увидеть, что-то подобное:

Дальше вы уже можете использовать GraphQL для реализации взаимодействия с React или любым другим компонентом вашего сайта.

Это перевод статьи из официального блога Wagtail, автор Brent Clark.
Возможность интегрировать Wagtail CMS (Django) с существующими моделями сайта на уровне GraphQL означает, что мы могли бы использовать наши существующие вызовы API внутри статей блога используя немного больше, чем ForeignKey и небольшой преобразователь.
Требуется:
- Пустая папка для проекта
- Python 3.6
- virtualenv
- Установленная Wagtail CMS (Руководство по установке)
Начнем создание стандартного блога:
Добавьте приложение для блога:
python manage.py startapp blog
Обновите blog/models.py со следующим содержимым:
# Taken From http://docs.wagtail.io/en/v1.9/getting_started/tutorial.html from __future__ import unicode_literals from django.db import models # Create your models here. from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.fields import RichTextField from wagtail.wagtailadmin.edit_handlers import FieldPanel from wagtail.wagtailsearch import index class BlogIndexPage(Page): intro = RichTextField(blank=True) content_panels = Page.content_panels + [ FieldPanel('intro', classname="full") ] class BlogPage(Page): date = models.DateField("Post date") intro = models.CharField(max_length=250) body = RichTextField(blank=True) search_fields = Page.search_fields + [ index.SearchField('intro'), index.SearchField('body'), ] content_panels = Page.content_panels + [ FieldPanel('date'), FieldPanel('intro'), FieldPanel('body', classname="full"), ]
Для реализации связки Wagtail CMS (Django) и GraphQL используем Graphene.
Примечание: Это решение универсальное для многих Django проектов благодаря пакету «Graphene-django»
Установите Graphene:
pip install "graphene-django==1.2"
Настройка Graphene:
Добавьте параметр GRAPHENE в base.py
GRAPHENE = { 'SCHEMA': 'api.schema.schema', }
Добавьте приложение API:
Создайте в корневой папке сайта mysite, папку с названием api
Добавить apps.py
Создайте файл apps.py внутри новой папки api и вставьте туда следующее:
from django.apps import AppConfig class ApiConfig(AppConfig): name = 'api'
Добавить schema.py
Создайте еще один файл schema.py внутри папки api с указанным ниже содержимым:
from __future__ import unicode_literals import graphene from graphene_django import DjangoObjectType from blog.models import BlogPage from django.db import models class ArticleNode(DjangoObjectType): class Meta: model = BlogPage only_fields = ['id', 'title', 'date', 'intro', 'body'] class Query(graphene.ObjectType): articles = graphene.List(ArticleNode) @graphene.resolve_only_args def resolve_articles(self): return BlogPage.objects.live() schema = graphene.Schema(query=Query)
Настройка URL-адресов
Добавьте два новых импорта в ваш urls.py файл.
from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView
Добавьте два новых URL-адреса в ваш urls.py файл, чуть выше адресов Wagtail.
url(r'^api/graphql', csrf_exempt(GraphQLView.as_view())), url(r'^api/graphiql', csrf_exempt(GraphQLView.as_view(graphiql=True, pretty=True))),
Добавьте новые приложения в настройки:
INSTALLED_APPS = ( # ... ранее установленные приложения 'api', 'blog', 'graphene_django', )
Зафиксируйте изменения:
python manage.py makemigrations python manage.py migrate
Если все было сделано правильно и не появилось ошибок, то запустите локальный сервер:
python manage.py runserver
Создайте новую запись в блоге:
- Зайдите в панель администратора wagtail по адресу http://localhost:8000/admin/.
- Используя меню, перейдите к Explorer > Home Page и нажмите Add Child Page
- Добавить новую страницу типа BlogPage
- Заполните все поля
- Сохраните и опубликуйте новую страницу.
Тестирование GraphQL:
Перейдите в http://localhost:8000/api/graphiql и выполните запрос показанный ниже:
query articles { articles { id title date intro body } }
Вы должны увидеть, что-то подобное:

Дальше вы уже можете использовать GraphQL для реализации взаимодействия с React или любым другим компонентом вашего сайта.
