web/django
Django SWAGGER 이용해 API 명세 작성하기
민사민서
2024. 5. 8. 00:32
반응형
pip install -U drf-yasg # 전역으로 설치
pip freeze > requirements.txt # 버전정보 저장
설치하시죠
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'post.apps.PostConfig', # 'post' 라고만 적어도 됨
'drf_yash',
]
seminar/settings.py 에서 해당 앱을 등록해주고
from django.contrib import admin
from django.urls import path, include
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="Post API",
default_version='v1',
description="Post API",
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/post/', include('post.urls')),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]
seminar/urls.py 에서 swagger url을 새롭게 등록해준다
이렇게 API 명세 화면이 잘 뜬다 !!
class PostListView(APIView):
## 여길 추가합니다
@swagger_auto_schema(
operation_id='게시글 목록 조회',
operation_description='게시글 목록을 조회합니다.',
responses={200: PostSerializer(many=True)}
)
## 여길 추가합니다
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
## 여길 추가합니다
@swagger_auto_schema(
operation_id='게시글 생성',
operation_description='게시글을 생성합니다.',
request_body=PostSerializer,
responses={201: PostSerializer}
)
## 여길 추가합니다
def post(self, request):
title = request.data.get('title')
content = request.data.get('content')
if not title or not content:
return Response({"detail": "[title, content] fields missing."}, status=status.HTTP_400_BAD_REQUEST)
post = Post.objects.create(title=title, content=content)
serializer = PostSerializer(post)
return Response(serializer.data, status=status.HTTP_201_CREATED)
이런 식으로 @swagger_auto_scheme() 이라는 데코레이션을 통해 API 명세를 추가할 수 있습니다~~
반응형