From 3ffb90ecc2589016bac1e0dabc05a85b025da89c Mon Sep 17 00:00:00 2001 From: parkseongheum Date: Sat, 25 Feb 2023 02:23:16 +0900 Subject: [PATCH 1/4] =?UTF-8?q?update:=20swagger=20(drf-spectacular)=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyconkr/settings.py | 24 ++++++++++++++++++++++++ pyconkr/urls.py | 23 +++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 48 insertions(+) diff --git a/pyconkr/settings.py b/pyconkr/settings.py index 2b193e8..d2c7ff1 100644 --- a/pyconkr/settings.py +++ b/pyconkr/settings.py @@ -44,6 +44,8 @@ "constance.backends.database", # apps "sponsor", + # swagger + "drf_spectacular", ] MIDDLEWARE = [ @@ -145,3 +147,25 @@ "후원사 변동사항에 대한 알림을 보낼 채널", ), } + +# drf-spectacular +REST_FRAMEWORK = { + # YOUR SETTINGS + "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", +} + +SPECTACULAR_SETTINGS = { + "TITLE": "pyconkr-api-v2", + "DESCRIPTION": "파이콘 한국 웹서비스용 API (2023 ~ )", + "VERSION": "1.0.0", + "SERVE_INCLUDE_SCHEMA": True, + # available SwaggerUI configuration parameters + # https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/ + "SWAGGER_UI_SETTINGS": { + "deepLinking": True, + "persistAuthorization": True, + "displayOperationId": True, + }, + # available SwaggerUI versions: https://github.com/swagger-api/swagger-ui/releases + "SWAGGER_UI_DIST": "//unpkg.com/swagger-ui-dist@3.35.1", +} diff --git a/pyconkr/urls.py b/pyconkr/urls.py index d00d408..34d9fb0 100644 --- a/pyconkr/urls.py +++ b/pyconkr/urls.py @@ -16,7 +16,14 @@ from django.contrib import admin from django.urls import include, path +from drf_spectacular.views import ( + SpectacularAPIView, + SpectacularRedocView, + SpectacularSwaggerView, +) + import sponsor.routers +import pyconkr.settings as settings urlpatterns = [ path("api-auth/", include("rest_framework.urls")), @@ -24,3 +31,19 @@ path("admin/", admin.site.urls), path("sponsors/", include(sponsor.routers.get_router().urls)), ] + +if settings.DEBUG is True: + urlpatterns += [ + path("api/schema/", SpectacularAPIView.as_view(), name="schema"), + # Optional UI: + path( + "api/schema/swagger-ui/", + SpectacularSwaggerView.as_view(url_name="schema"), + name="swagger-ui", + ), + path( + "api/schema/redoc/", + SpectacularRedocView.as_view(url_name="schema"), + name="redoc", + ), + ] diff --git a/requirements.txt b/requirements.txt index 895cfb4..523fdff 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,3 +14,4 @@ django-summernote==0.8.20.0 Pillow==9.4.0 django-constance==2.9.1 django-picklefield==3.1 +drf-spectacular==0.25.1 From 45535b0508274e82204949a8116dff01e395b68a Mon Sep 17 00:00:00 2001 From: parkseongheum Date: Sat, 25 Feb 2023 02:29:16 +0900 Subject: [PATCH 2/4] =?UTF-8?q?update:=20=ED=99=9C=EC=84=B1=ED=99=94=20?= =?UTF-8?q?=EB=90=9C=20settings=20=EA=B0=92=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyconkr/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyconkr/urls.py b/pyconkr/urls.py index 34d9fb0..f9be88c 100644 --- a/pyconkr/urls.py +++ b/pyconkr/urls.py @@ -15,6 +15,7 @@ """ from django.contrib import admin from django.urls import include, path +from django.conf import settings from drf_spectacular.views import ( SpectacularAPIView, @@ -23,7 +24,6 @@ ) import sponsor.routers -import pyconkr.settings as settings urlpatterns = [ path("api-auth/", include("rest_framework.urls")), From 0f503f5f1f30da1b864eb92429795363e47bd379 Mon Sep 17 00:00:00 2001 From: parkseongheum Date: Sat, 25 Feb 2023 02:31:31 +0900 Subject: [PATCH 3/4] isort --- pyconkr/urls.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pyconkr/urls.py b/pyconkr/urls.py index f9be88c..cb6db2c 100644 --- a/pyconkr/urls.py +++ b/pyconkr/urls.py @@ -13,15 +13,11 @@ 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ +from django.conf import settings from django.contrib import admin from django.urls import include, path -from django.conf import settings - -from drf_spectacular.views import ( - SpectacularAPIView, - SpectacularRedocView, - SpectacularSwaggerView, -) +from drf_spectacular.views import (SpectacularAPIView, SpectacularRedocView, + SpectacularSwaggerView) import sponsor.routers From c3c8c81c399c4a745af7f0b5cae54dc55b47d9c6 Mon Sep 17 00:00:00 2001 From: parkseongheum Date: Sat, 25 Feb 2023 03:12:05 +0900 Subject: [PATCH 4/4] lint: black --- pyconkr/urls.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyconkr/urls.py b/pyconkr/urls.py index cb6db2c..7f70d1c 100644 --- a/pyconkr/urls.py +++ b/pyconkr/urls.py @@ -16,8 +16,11 @@ from django.conf import settings from django.contrib import admin from django.urls import include, path -from drf_spectacular.views import (SpectacularAPIView, SpectacularRedocView, - SpectacularSwaggerView) +from drf_spectacular.views import ( + SpectacularAPIView, + SpectacularRedocView, + SpectacularSwaggerView, +) import sponsor.routers