手把手程式實作分享系列: Swagger and Django 自定義文檔 drf-yasg

Walter Chiu
Bandai的機器學習筆記
6 min readFeb 24, 2021

還沒看過基本教學的朋友,如果想先了解基本Swagger設定的,先往上一篇走。 傳送門提供在下方

這篇是為了客製化定義API的說明而生的分享章節。GOGOGO

0. 安裝

pip install -U drf-yasg

沒什麼好解釋的。

1. Setting.py 設定

上次加入的是rest_framework_swagger,自定義的部分記得加入drf_yasg。

INSTALLED_APPS = [

‘drf_yasg’,

]

2. url.py的設定

修改 Django REST framework project 的 urls.py 新增 drf_yasg 的 URL(建議修改 openapi.Info 的 title、contact 等資訊):

...
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi...schema_view = get_schema_view(
openapi.Info(
title="Snippets API",
default_version='v1',
description="Test description",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contact@snippets.local"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=(permissions.AllowAny,),
)urlpatterns += [
url(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
url(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
...
]

schema_view = get_schema_view 那一段在定義的是swagger首頁ux的一些參數,應該都看得懂,就稍微紀錄一下團隊的資訊。

下面link的部分

#這一段是在和django 連接 swagger的介面

path(‘’, schema_view.with_ui(‘swagger’,cache_timeout=0), name=’schema-swagger-ui’),

#然後用串接的方式 從最外層的url 連接到 到下層的app url.py

path('swagger_server/', include(('swagger_server.urls', 'swagger_server'),namespace="swagger_server")),

3. 定義下層的app url.py

這邊重點是連接自身的view.py ˊ
一定要跟下一層的view.py 串好才會顯示出來喔

from django.urls import path
from .views import MusicViewSet,doct_list
urlpatterns = [
path(‘MusicViewSet/’, MusicViewSet.as_view()),
path(‘doct_list/’, doct_list.as_view()),
]

4. view.py 的設定

Django 透過 view.py 設定 RESTful api

我們swagger 是來管理這些東西的,那客製化寫一些README是理所當然的。

我們來看看範例:

這樣就完成一個簡單而且有註解的api了!

是不是很簡單呢!

from drf_yasg.utils import swagger_auto_schema
from rest_framework.generics import GenericAPIVie
class doct_list(GenericAPIView):
serializer_class = MusicSerializer
@swagger_auto_schema(
operation_summary=’簡單API’,
operation_description=’這是註解',)

def post(self, request):
pass
return Response(data, status=status.HTTP_200_OK)
def get(self, request):
pass
return Response(data, status=status.HTTP_200_OK)

*** model.py 跟serializers.py不解釋 就是造原來的設定即可

關於參數客製化的文章也可以參考這一篇

然後這邊有一個人家的github也附上給大家參考

reference:

--

--

Walter Chiu
Bandai的機器學習筆記

台大電機博士候選人,主要學習電腦科學、資訊教育,關心各種時事議題,歡迎一起討論有趣的專題 dodo0095@hotmail.com