用 Django REST Framework 撰寫 RESTful API 並生成 Swagger 文檔(下) — 生成 Swagger 文檔

Jo-Yu Liao
6 min readMay 11, 2020

簡介 Swagger、Django REST Framework 以及 drf-yasg

適用讀者:對 Django 有基本認識想要用 Django REST Framework 撰寫 RESTful API 並生成 Swagger 文檔。如果沒有聽過 Django,建議先閱讀官方文檔

本篇假定讀者已有基本的 Django REST Framework 專案,希望能增加 Swagger,如果還沒有可以參考上篇

用 Django REST framework swagger 套件 drf_yasg 生成 Swagger UI

drf-yasg 是一個可以在 Django REST framework 自動生成 Swagger 的套件。我們先用 pip 安裝:

pip install -U drf-yasg

再將 drf_yasg 加到的 demo/settings.py

INSTALLED_APPS = [
...
'drf_yasg',
...
]

修改 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'),
...
]

完成後透過指令啟動 server:

python manage.py runserver

訪問 http://127.0.0.1:8000/swagger/ 就可以看到已經生成下面的 swagger UI 囉:

swagger UI

點擊 POST /users/ 再按 Try it Out,可看到他自動將我們在 UserSerializer 定義的 fields 帶入參數,再點擊 Execute 就會請求 API 建立第一筆用戶資料囉!如果再點擊一次會發現報錯。

post user

因為我們在 user/models.py 將 email 設為 unique=True,所以第二次請求的時候因為 email 已經存在資料庫,所以在 UserSerializer 驗證的時候會就會失敗:

serializer.is_valid(raise_exception=True)

建立完 user 資料後,就可以點擊 GET /users/ 獲取資料囉!

GET /users/

以上就是安裝 drf-yasg 的簡介,如果想要自定義文檔,可以參考:

感謝閱讀。

--

--