저번 포스트에는 Wagtail에서 API v2의 기본 Settings에 대해서 알아봤다.
이제 본격적으로 사용하는 방법에 대해서 알아보자.
먼저 Wagtail에서 작성한 Flex Page API와 Flex Page Model을 보자.
flex/models.py
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
from wagtail.core.models import Page
from wagtail.core.fields import StreamField
from streams import blocks
class FlexPage(Page):
template = "flex/flex_page.html"
content = StreamField(
[
("title_and_text", blocks.TitleAndTextBlock()),
("full_richtext", blocks.RichtextBlock()),
("simple_richtext", blocks.SimpleRichtextBlock()),
("cards", blocks.CardBlock()),
("cta", blocks.CTABlock()),
("button", blocks.ButtonBlock())
],
null=True,
blank=True
)
subtitle = models.CharField(max_length=100, null=True, blank=True)
content_panels = Page.content_panels + [
FieldPanel("subtitle"),
StreamFieldPanel("content"),
]
class Meta:
verbose_name = "Flex Page"
verbose_name_plural = "Flex Pages"
정보가 전부 표시되지 않고 있다. 나는 FlexPage에 subtitle과 content Fields를 가지고 있는데 API에서는 표시되지 않는다. API Field에 내가 작성한 Fields을 등록하지 않아서 그렇다. 간단하게 등록할 수 있다.
from django.db import models
from wagtail.api import APIField # 추가
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
from wagtail.core.models import Page
from wagtail.core.fields import StreamField
from streams import blocks
class FlexPage(Page):
template = "flex/flex_page.html"
content = StreamField(
[
("title_and_text", blocks.TitleAndTextBlock()),
("full_richtext", blocks.RichtextBlock()),
("simple_richtext", blocks.SimpleRichtextBlock()),
("cards", blocks.CardBlock()),
("cta", blocks.CTABlock()),
("button", blocks.ButtonBlock())
],
null=True,
blank=True
)
subtitle = models.CharField(max_length=100, null=True, blank=True)
#추가
api_fields = [
APIField('subtitle'),
APIField('content')
]
content_panels = Page.content_panels + [
FieldPanel("subtitle"),
StreamFieldPanel("content"),
]
class Meta:
verbose_name = "Flex Page"
verbose_name_plural = "Flex Pages"
사용 방법
from wagtail.api import APIField
api_fields = [
APIField('subtitle'),
APIField('content')
]
Wagtail에서 content_panels 사용방법이랑 같다. 이렇게 하면 API 서버에 쉽게 원하는 Field를 등록할 수 있다.
그렇다면 원하는 Data를 가져오는 방법에 대해서 간단하게 알아보자.
1) 모든 data 가져오지 말기
http://127.0.0.1:8000/api/v2/pages/4/?fields=_
2) 특정 data 가져오지 말기
http://127.0.0.1:8000/api/v2/pages/4/?fields=-title
3) 특정 data들 가져오지 말기
http://127.0.0.1:8000/api/v2/pages/4/?fields=-title,-seo_title
4) 모든 data 가져오기
http://127.0.0.1:8000/api/v2/pages/4/?fields=*
'Back-End > Wagtail, Django' 카테고리의 다른 글
Wagtail API v2 Exposing Orderable Data and StreamFields (0) | 2021.11.24 |
---|---|
Wagtail API v2 Fetching Fields (0) | 2021.11.24 |
Wagtail API v2 Settings(Headless CMS) (0) | 2021.11.24 |
Wagtail Menu System (0) | 2021.11.23 |
Wagtail, Django Paginator (0) | 2021.11.21 |