저번 포스트에는 Wagtail에서 API v2의 기본 Settings에 대해서 알아봤다. 

이제 본격적으로 사용하는 방법에 대해서 알아보자. 

 

먼저 Wagtail에서 작성한 Flex Page API와 Flex Page Model을 보자.

 

flex page api

 

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

+ Recent posts