Wagtail에서 API를 사용하는 방법에 대해서 알아보자. 

Headless CMS에 대해서 간단하게 이해하고 넘어가려고 한다.

 

CMS는 Content Management System의 약자이다. 기존 블로그에 소개한 Wagtail 화면 구현방법은 FrontEnd와 BackEnd가 분리 되지 않아 FrontEnd에서 데이터를 표현할 때에는 HTML에 템플릿 언어를 통해 구현했다.

하지만, 개발 규모가 커져서 FrontEnd개발자와 BackEnd 개발자가 따로 있게 된다면 FrontEnd 개발자도 템플릿 언어와 BackEnd에 대해서 알아야 하는 문제가 생긴다. FrontEnd와 BackEnd가 분리되지 않는 것이다. 스마트폰 APP으로도 서비스를 출시하고 싶을 때에도 문제가 생긴다. 데이터의 표현 방법이 전부 다르기 때문이다. 

 

그래서 나온 것이 API이다. BackEnd에서는 API서버로 데이터를 보내주고 API서버를 통해 FrontEnd에서 필요한 데이터만 가져와서 사용하는 것이다. 이렇게 되면 BackEnd와 FrontEnd가 분리되어 개발 능률이 향상된다. 그렇다면 지금부터 Wagtail에서 API를 사용하는 방법에 대해서 알아보자. 

 

Wagtail에서는 API v2를 사용한다. 기본적으로 Wagtail은 Django 기반이기 때문에 Django RestFrameWork도 필요하다. 

 

 

API 통신을 위한 기본 Settings

 

1) django restframework 설치

pip install djangorestframework

 

 

2) base.py 수정

 

settings/base.py

INSTALLED_APP = [
	'wagtail.api.v2',
    
    	'rest_framework',
]

 

 

3) mysite/api.py 작성

 

mysite/api.py

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)

 

4) urls.py 수정

 

mysite/urls.py

from .api import api_router

urlpatterns = [
    path('django-admin/', admin.site.urls),

    path('admin/', include(wagtailadmin_urls)),
    path('documents/', include(wagtaildocs_urls)),

    path('search/', search_views.search, name='search'),

    path('sitemap.xml', sitemap),

    path("api/v2/", api_router.urls),

wagtail에서 url을 추가할 때에는 wagtail_urls path보다 위에 위치해야한다. 

 

 

TEST

 

setting이 완료되었다. 이제 서버를 실행시키고 127.0.0.1:8000/api/v2/로 접속해보자. 

404오류가 뜰 것이다. 정상이다. 아까 setting에서 작성한 api.py를 살펴보자. 

 

api_router.register_endpoint('pages', PagesAPIViewSet)

위의 코드에서 PagesAPIViewSet은 Wagtail에서 우리가 작성한 모든 Page의 Set이다. 그리고 앞에 'pages'는 이곳을 경로로 들어가겠다는 의미이다. 즉, 127.0.0.1:8000/api/v2/pages/ 로 접속하면 pages의 Set을 볼 수 있다. 그리고 'pages'말고 'pages-set'같은 이름으로 바꾸었을 때에는 'pages'대신 'pages-set'으로 접속하면 된다. 

 

특정한 page의 정보가 보고 싶다면 끝에 page의 id 를 추가 해주면된다. 기본적으로 127.0.0.1:8000/api/v2/pages/3/는 홈페이지 이다. 

 

추가) Site port Setting

 

Wagtail Site에 들어가보면 Port가 80으로 되어 있을 것이다. 8000으로 바꿔주자.

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail API v2 Fetching Fields  (0) 2021.11.24
Wagtail API v2 Exposing Custom Fields  (0) 2021.11.24
Wagtail Menu System  (0) 2021.11.23
Wagtail, Django Paginator  (0) 2021.11.21
Wagtail StructValue  (0) 2021.11.18

+ Recent posts