본문 바로가기
Django

Django REST API 백앤드 서버 구축하기

by kingyejin 2024. 10. 28.

먼저 아래 글을 통해 기본 Django 앱 세팅까지 완료해줍니다!

2024.07.05 - [Django] - Django rest framework 설치 및 기본 세팅

 

Django rest framework 설치 및 기본 세팅

1. 가상 환경 설정 및 패키지 설치처음에는 장고를 시작하듯이 가상환경부터 만들어주고 시작하면 된다.#가상환경 생성python3 -m venv 가상환경이름#가상환경 활성화source 가상환경이름/bin/activate#

kysf.tistory.com

 

해당 게시글처럼 migration 실행 테이블 생성까지 완료하셨다면 아래 단계를 따라주세요!

#마이그레이션 파일 생성
python3 manage.py makemigrations

#마이그레이션 실행 테이블 생성
python3 manage.py migrate

1. 어드민 계정 생성 및 서버 실행

python3 manage.py createsuperuser
python3 manage.py runserver

 

아래와 같이 localhost:8000로 접속하여 웹서버 기동되는 것 확인 가능!


2. 관리자 페이지에 앱에 대한 User와 Entry 띄우기

 

models.py 코드

# Create your models here.
from django.db import models


class User(models.Model):
    name = models.CharField(max_length=32)
    mail = models.EmailField()


class Entry(models.Model):
    STATUS_DRAFT = "draft"
    STATUS_PUBLIC = "public"
    STATUS_SET = (
            (STATUS_DRAFT, "下書き"),
            (STATUS_PUBLIC, "公開中"),
    )
    title = models.CharField(max_length=128)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    status = models.CharField(choices=STATUS_SET, default=STATUS_DRAFT, max_length=8)
    author = models.ForeignKey(User, related_name='entries', on_delete=models.CASCADE)

 

admin.py 코드

# Register your models here.
from django.contrib import admin

from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass

@admin.register(Entry)
class Entry(admin.ModelAdmin):
    pass

3. 관리자 페이지 접속

localhost:8000/admin으로 접속하여 생성한 어드민 계정으로 로그인 후, 관리자 페이지 들어가기

생성된 앱의 Entrys와 Users를 볼 수 있습니다! 이제 직접 사용자 및 entry 데이터를 추가해봅시다


이제 기본적인 API 생성을 위한 설정은 끝마쳤습니다!

여기서 Django REST API를 만들기 위해서는 아래의 3가지만 기억하시면 됩니다.

Serializer
ViewSet
URL pattern

 

간단하게 설명을 드리자면,

Serializer Response 할때 모델의 데이터를 반환하는 전반적인 일을 맡아서 해줍니다. 

밸리데이션체크나 에러체크 각 테이블의 조인등 많은 것들을 시리얼라이즈에서 해주기도하고 커스터마이징 하게됩니다.

비지니즈로직등을 코딩하게 된다면 시리얼라이즈에서 하게됩니다.

 

ViewSetAPI요청의 입구라고 생각하시면 될것 같습니다.

GET POST등의 리퀘스트가 ViewSet으로 들어오게 되고 ViewSet에서는 해당 시리얼라이즈 모델을 되돌려주는 일을 합니다.

세큐리티나 인증처리등을 맡아서 하기도 합니다.

 

URL pattern 장고 서버의 URL을 정의합니다.

새로운 앱을 추가해서 외부로 통신을 하기 위해서는 URL을 함게 추가해주어야 합니다.


4. 앱(banya)에 API 관련 python 파일 작성하기

-serializer.py 작성하기-

from rest_framework import serializers

from .models import User, Entry

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('name', 'mail')

class EntrySerializer(serializers.ModelSerializer):
    class Meta:
        model = Entry
        fields = ('title', 'body', 'created_at', 'status', 'author')

 

-views.py 작성하기-

from rest_framework import viewsets, filters
from .models import User, Entry
from .serializer import UserSerializer, EntrySerializer

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class EntryViewSet(viewsets.ModelViewSet):
    queryset = Entry.objects.all()
    serializer_class = EntrySerializer

 

-urls.py 작성하기-

from rest_framework import routers
from .views import UserViewSet, EntryViewSet

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'entries', EntryViewSet)

5. 앱(banya)의 urls.py를 메인 urls.py에 임포트하기

-메인 urls.py에 추가하기-

from django.urls import re_path, include
from django.contrib import admin
from django.urls import path
from banya.urls import router as banya_router

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^api/', include(banya_router.urls)),
]

6. 서버 구동 후 api 리스트 확인하기

localhost:8000/api에 접속하여 리스트를 확인해줍니다.

localhost:8000/api/users와 localhost:8000/entries에 접속하여 각각의 리스트를 확인해줍니다.

다음에서는 author가 아이디만 나오고 있습니다.

만약 유저의 이름과 이메일도 나오고 싶게 하고 싶다면 아래와 같이 앱의 serializer.py를 수정해주면 됩니다.

from rest_framework import serializers

from .models import User, Entry

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('name', 'mail')

class EntrySerializer(serializers.ModelSerializer):
    author = UserSerializer() #추가된 부분
    class Meta:
        model = Entry
        fields = ('title', 'body', 'created_at', 'status', 'author')

 

그리고 다시 reload 하면 다음과 같이 유저에 대한 정보도 출력되는 것을 볼 수 있습니다.

 

 

이상 장고로 REST API 설정하기까지 해보았습니다!


아래 영상을 참고했습니다.

https://www.youtube.com/watch?v=5uZ-NOX1o1E