added wagtail v2 api

This commit is contained in:
Lorenz Padberg 2022-05-16 16:57:21 +02:00
parent 515f01c450
commit 2a93c05bc2
4 changed files with 53 additions and 0 deletions

16
server/config/api.py Normal file
View File

@ -0,0 +1,16 @@
from wagtail.api.v2.views import PagesAPIViewSet
from wagtail.api.v2.router import WagtailAPIRouter
from wagtail.images.api.v2.views import ImagesAPIViewSet
from wagtail.documents.api.v2.views import DocumentsAPIViewSet
# Create the router. "wagtailapi" is the URL namespace
api_router = WagtailAPIRouter('wagtailapi')
# Add the three endpoints using the "register_endpoint" method.
# The first parameter is the name of the endpoint (eg. pages, images). This
# is used in the URL of the endpoint
# The second parameter is the endpoint class that handles the requests
api_router.register_endpoint('pages', PagesAPIViewSet)
api_router.register_endpoint('images', ImagesAPIViewSet)
api_router.register_endpoint('documents', DocumentsAPIViewSet)

View File

@ -99,6 +99,7 @@ THIRD_PARTY_APPS = [
'wagtail.admin', 'wagtail.admin',
'wagtail.core', 'wagtail.core',
'wagtail.locales', 'wagtail.locales',
'wagtail.api.v2',
'modelcluster', 'modelcluster',
'taggit', 'taggit',

View File

@ -21,6 +21,8 @@ from wagtail.admin import urls as wagtailadmin_urls
from wagtail.core import urls as wagtail_urls from wagtail.core import urls as wagtail_urls
from wagtail.documents import urls as wagtaildocs_urls from wagtail.documents import urls as wagtaildocs_urls
from grapple import urls as grapple_urls from grapple import urls as grapple_urls
from .api import api_router
def raise_example_error(request): def raise_example_error(request):
@ -57,6 +59,8 @@ if settings.ALLOW_LOCAL_LOGIN:
urlpatterns += [ urlpatterns += [
# API base url # API base url
path("api/", include("config.api_router")), path("api/", include("config.api_router")),
path('api/v2/', api_router.urls),
# DRF auth token # DRF auth token
path("auth-token/", obtain_auth_token), path("auth-token/", obtain_auth_token),
path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"), path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"),

View File

@ -4,6 +4,7 @@ from django.utils.text import slugify
from wagtail.core.blocks import StreamBlock from wagtail.core.blocks import StreamBlock
from wagtail.core.fields import StreamField from wagtail.core.fields import StreamField
from wagtail.core.models import Page, Orderable from wagtail.core.models import Page, Orderable
from wagtail.api import APIField
from vbv_lernwelt.learnpath.models_competences import * from vbv_lernwelt.learnpath.models_competences import *
from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock
@ -57,6 +58,12 @@ class Topic(Orderable):
GraphQLBoolean("is_visible"), GraphQLBoolean("is_visible"),
] ]
api_fields = [
APIField('title'),
APIField('is_visible'),
]
# content_panels = Page.content_panels + [ # content_panels = Page.content_panels + [
# FieldPanel('is_visible', classname="full"), # FieldPanel('is_visible', classname="full"),
# PageChooserPanel('learning_path', 'learnpath.LearningPath'), # PageChooserPanel('learning_path', 'learnpath.LearningPath'),
@ -102,6 +109,13 @@ class Circle(Page, Orderable):
GraphQLString("goals"), GraphQLString("goals"),
] ]
# Export fields over the API
api_fields = [
APIField('title'),
APIField('description'),
APIField('learning_sequences'),
]
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True)) self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True))
@ -147,6 +161,12 @@ class LearningSequence(Orderable):
GraphQLBoolean("category"), GraphQLBoolean("category"),
] ]
api_fields = [
APIField('title'),
APIField('category'),
APIField('learning_packages'),
]
class Meta: class Meta:
verbose_name = "Learning Sequence" verbose_name = "Learning Sequence"
@ -176,6 +196,11 @@ class LearningPackage(Orderable):
GraphQLString("title", required=False), GraphQLString("title", required=False),
] ]
api_fields = [
APIField('title'),
APIField('learning_units'),
]
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(LearningPackage, slugify(self.title, allow_unicode=True)) self.slug = find_available_slug(LearningPackage, slugify(self.title, allow_unicode=True))
@ -216,6 +241,13 @@ class LearningUnit(Page, Orderable):
GraphQLStreamfield('contents') GraphQLStreamfield('contents')
] ]
api_fields = [
APIField('title'),
]
subpage_types = [] subpage_types = []
class Meta: class Meta: