728x90
DRF
- Django REST framework, 웹 API 구축을 위한 툴킷
- RESTful API 서버 구축을 용이하게 해주는 오픈소스 라이브러리
- 파이썬 데이터를 JSON 파일로 직렬화 가능한 장점을 가짐
- 개발 및 유지보수가 간편한 장점을 가짐
기본 설정
Django REST framework 설치
$ pip install djangorestframework
- Django rest framework install
Django REST framework 등록
- project settings.py에 rest_framework 등록
프로젝트 urls 설정
# project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('articles.urls'))
]
- 애플리케이션 이름을 직접 적었던 이전과 다르게, 'api/v1/'으로 이동경로 설정
model 정의
# articles/models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
- 데이터베이스 테이블 생성과정
- 정의한 필드는 데이터베이스의 테이블이 됨
serializer
serializer 파일 생성
$ touch serializers.py
- 애플리케이션 폴더 내부에 serializers.py 파일 생성
serializer 정의
# articles/serializer.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
- 정의한 model을 바탕으로 작성 (작성 방법은 model과 유사)
- serializer는 직렬화 작업 수행
- fields는 일부로 설정 가능
데이터베이스 반영
$ python manage.py makemigrations
$ python manage.py migrate
- model 변동 시와 같이 serializer 변동 시에도 두 작업 진행 필수
urls 작성
# articles/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
path('create/', views.create),
path('update/<int:article_pk>/', views.update),
path('delete/<int:article_pk>/', views.delete),
]
- 기존 urls 정의 방법과 유사
- 애플리케이션 이름은 적을 필요 없음
views 작성
전체 코드 캡쳐
- 각 코드 의미는 사진 및 아래 코드블럭 주석 참고
import 목록
# articles/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article
from .serializer import ArticleSerializer
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status
index
# articles/views.py
@api_view(['GET'])
def index(request):
# Article 모델에 있는 모든 인스턴스 가져오기
articles = Article.objects.all()
# ArticleSerializer를 사용해서 articles(Article의 모든 인스턴스를 담은 변수)를 직렬화
serializer = ArticleSerializer(articles, many=True)
# Response를 사용해서 serializer로 직렬화한 데이터를 반환
return Response(serializer.data)
- 전체 article 조회
create
# articles/views.py
@api_view(['POST'])
def create(request):
# ArticleSerializer데이터에 요청 데이터를 넣어 직렬화
serializer = ArticleSerializer(data=request.data)
# 유효성 검사를 통과하지 못하면 오류 반환
if serializer.is_valid(raise_exception=True):
# 유효성 검사 통과 시 저장, serializer의 데이터 반환
serializer.save()
return Response(serializer.data)
- article 생성
update
# articles/views.py
@api_view(['PUT']) # 수정은 무조건 PUT 사용
def update(request, article_pk):
# article 변수에 수정할 pk를 가진 인스턴스를 찾아서 가져오기
article = get_object_or_404(Article, pk=article_pk)
# 요청 데이터를 넣어 직렬화, article을 넣어 그 인스턴스의 내용을 수정
serializer = ArticleSerializer(article, data=request.data)
# 수정한 내용 유효성 검사하기 -> 통과 시 저장
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data)
- 기존 article 수정
delete
# articles/views.py
@api_view(['DELETE']) # 삭제는 무조건 DELETE 사용
def delete(request, article_pk):
# 삭제할 pk를 가진 데이터 가져와 article 변수에 저장, 삭제
article = get_object_or_404(Article, pk=article_pk)
article.delete()
# 삭제 후 해당 내용이 없다는 HTTP 상태 반환
return Response(status=status.HTTP_204_NO_CONTENT)
- 기존 article 삭제
'Django' 카테고리의 다른 글
Django DB(데이터베이스) 테이블 설정하기 (0) | 2023.05.14 |
---|---|
Django 페이지 생성하기 (0) | 2023.05.09 |
Django 애플리케이션 별 urls 분리하기 (0) | 2023.05.07 |
Django 기본 탬플릿(base.html) 생성, App 탬플릿 상속 (0) | 2023.04.30 |
Django 시작하기(가상환경, 프로젝트, 앱 생성) 맥M1, 윈도우 (0) | 2023.04.28 |