TIL117. DRF : ModelViewSet 간단 사용기
📌 이 포스팅에서는 DRF 초기세팅 및 ModelViewSet으로 간단한 API를 구현하는 과정을 정리하였습니다.
🌈 ModelViewSet 간단 사용기
🔥 DRF 초기 settings
🔥 serializers 만들기
🔥 HTTPie 사용하여 API 다루기
1. DRF 초기 settings
🤔 django-rest-framework 설치
✔️ 설치 방법은 아래와 같다.
$ > pip install djangorestframework
✔️ 설치 후, requirements.txt에 해당 버전을 추가해준다.
# requirements.txt Django==4.0.1 djangorestframework==3.13.1
✔️ 추가 후, INSTALLED_APPS에 djangorestframework를 추가시킨다.
# settings.py DJANGO_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] PROJECT_APPS = [ ] THIRD_PARTY_APPS = [ 'rest_framework', # 👈 추가 ] INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS + THIRD_PARTY_APPS
✔️ ROOT_URLCONF에 아래 경로를 추가해준다.
✔️ 'api-auth/'는 django에 기본 auth를 사용해서 login을 하기 위해 추가한 것이다. 로그인 기능이 필요없이 간단한 api 테스트를 할 경우에 필요하지 않다.
# config/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), # 👈 추가 ]
2. serializers 만들기
🤔 models.py & serializers 작성
✔️ 간단한 Post를 작성할 수 있는 Model을 만들고, migration 한다.
# models.py from django.db import models class Post(models.Model): message = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
✔️ ModelSerializer를 상속받아, serializer를 아래 처럼 만들 수 있다.
✔️ serializers는 Django From과 유사한 형태를 가지고 있다.
# serializers from rest_framework.serializers import ModelSerializer from .models import Post class PostSerializer(ModelSerializer): class Meta: model = Post # 👈 model 지정 fields = '__all__' # 👈 모든 field 지정
🤔 views.py & urls.py 작성
✔️ ModelViewSet을 상속받아 View를 작성한다. 이렇게하면, 2가지의 View를 1개로 통합하여 사용할 수 있다.
✔️ 2개의 View란, 아래의 기능을하는 API를 의미한다.
- [GET] /post/ : post list 읽어오기
- [POST] /post/ : post 생성하기
- [GET] /post/pk : 1번 post 상세보기
- [PUT] /post/pk : 1번 post 수정
- [DELETE] /post/pk : 1번 post 삭제
✔️ 즉, PostViewSet 하나로, Post를 CRUD할 뿐만아니라, list까지 요청할 수 있다.
from rest_framework.viewsets import ModelViewSet from .serializers import PostSerializer from .models import Post class PostViewSet(ModelViewSet): queryset=Post.objects.all() # 👈 queryset 작성 serializer_class=PostSerializer # 👈 serializer 매핑
✔️ DefaultRouter 객체를 생성 후, 생성된 인스턴스에 url을 아래처럼 등록해준다.
# urls.py from django.urls import include, path from rest_framework.routers import DefaultRouter from . import views router = DefaultRouter() router.register('post', views.PostViewSet) # 👈 2개 URL을 만들어준다. urlpatterns = [ path('', include(router.urls)), ]
3. HTTPie 사용하여 API 다루기
🤔 JSON 응답뷰 보기
✔️ 서버를 실행 후 http://127.0.0.1/post로 접근하면 아래와 같은 화면을 볼 수 있다. 여기서 게시글을 확인하고, 등록도 가능하다.
🤔 httpie 사용하기
✔️ httpie는 아래의 명령어를 통해 설치한다.
$> pip install httpie
✔️ httpie를 설치했다면, http 뒤에 endpoint를 작성하면 PostMan처럼 사용할 수 있다.
$ >http http://localhost:8000/post/
✔️ 게시글 상세보기는 뒤에 pk를 적어주면 된다. 맨 앞에 매서드를 적지 않으면 Default로 GET요청이 이뤄진다.
$ > http http://localhost:8000/post/1/
✔️ POST 요청으로 게시글을 작성하려면, endpoint 뒤에 한칸 띄고, field명="메시지 내용"을 적는다.
$ > http http://localhost:8000/post/ message="4th Test Message"
✔️ 수정(PUT)과 삭제(DELETE)는 매서드를 앞에 꼭 적어주어야 한다.
$ > http --form PUT http://localhost:8000/post/4/ message="I just modified the 4th message."
Author And Source
이 문제에 관하여(TIL117. DRF : ModelViewSet 간단 사용기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jewon119/TIL00.-DRF-ModelViewSet-간단-사용기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)