4. Django 백엔드 구축

반응형

개요 - wooogy-egg.tistory.com/4

개발 환경 세팅 - wooogy-egg.tistory.com/5?category=938272

Flutter 앱 화면 및 로직 구성 - wooogy-egg.tistory.com/6

 

 

본 글을 인프런 강의를 따라서 제작해본 경험을 남기고자 작성합니다.

플러터와 장고로 풀스택 퀴즈앱을 만드는 강의 https://www.inflearn.com/course/플러터-장고-퀴즈앱-서버-풀스택
 

플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택] - 인프런

플러터와 장고로 풀스택 퀴즈앱을 만드는 강의입니다! 배울 거리가 많은 풀스택 강의로 풀스택 개발자가 되어보세요:) 초급 모바일 앱 개발 프레임워크 및 라이브러리 서버 개발 Django Flutter 모

www.inflearn.com

1) Create Project

해당 장고 프로젝트가 들어갈 빈 프로젝트 생성

> mkdir "프로젝트 이름"
> cd "프로젝트 이름"

가상환경 설정

> python3 -m venv venv
# 처음은 venv 명령어 2번째는 본인의 가상환경 이름 자유롭게 가능
> source venv/bin/activate
# 가상환경 활성화

장고 패키지 설치

> pip install django djangorestframework

장고 프로젝트 및 앱 생성

> django-admin startproject "원하는 이름" .
# . 은 현재 위치에 프로젝트를 푼다는 의미. 1 depth 줄어든다. 본인은 myapi로함


> python manage.py startapp "원하는 이름"

# 장고는 내부 프로젝트 안에 앱 기반으로 돌아가기에 본인은 quiz라는 앱 생성.

> code .

# 해당 루트 디렉토리에서 vscode를 염

2) settings.py

ALLOWED_HOST 수정

# settings.py

ALLOWED_HOSTS = ["*"]

TIME_ZONE 수정

TIME_ZONE = 'Asia/Seoul'

정적파일 관리 코드 작성

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

앱 추가

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'quiz',
    'rest_framework',
]

3) models

# quiz/models.py
from django.db import models

# Create your models here.

class Quiz(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    answer = models.IntegerField()

실제 퀴즈의 구성에 맞게 데이터베이스 모델을 설정해주는 것이다.

제목, 내용, 정답 으로 간단하게 구성하였다.

4) serializers

장고의 모델 형태로 데이터를 JSON 형식으로 직렬화 해주는 코드이다.

장고 모델 데이터를 템플릿에 뿌려주면 웹에 보여지듯이 JSON을 이용해 api 통신을 하는 것이다.

# quiz 폴더 내에 serializers.py 생성

# quiz/serializers.py

from rest_framework import serializers
from .models import Quiz

class QuizSerializer(serializers.ModelSerializer):
    class Meta:
        model = Quiz
        fields =  '__all__'

rest_framework 패키지의 serializer를 import 해주고 3에서 만들어주었던 Quiz 모델을 import한다.

fileds = ('title', 'body', 'answer')의 전체 필드를 다 담아오게 작성하는 것인데 본인의 경우 에러가 떠서 위와 같이 코딩해주었다.

Quiz 모델에 있는 데이터를 title, body, answer를 포함한 JSON 형식으로 변환해주는 것이다.

5) views

from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Quiz
from .serializers import QuizSerializer
import random

# Create your views here.

@api_view(['GET'])
def helloAPI(request):
    return Response("hello world!")

@api_view(['GET'])
def randomQuiz(request, id):
    totalQuizs = Quiz.objects.all()
    randomQuizs = random.sample(list(totalQuizs), id)
    serializer = QuizSerializer(randomQuizs, many=True) #many 부분을 통해 다량의 데이터도 직렬화 진행
    return Response(serializer.data)

helloAPI는 실제 API 테스트를 하기 위한 샘플 코드이다.

randomQuiz는 주어진 갯수만큼 랜덤한 퀴즈를 반환하는 API이다.

생성해준 Quiz 데이터베이스의 모든 object를 가져와서 random 패키지를 통해 해당 object에서 갯수만큼 샘플링을 한다.

many=True 부분은 다량의 데이터를 직렬화하기 위해서이다.

6) urls

api에 요청을 할 수 있는 주소를 생성하는 것이다. 위에서 작성해준 함수를 사용해줄 것이기에 . veiws 파일에서 randomQuiz를 import 해준다.

# quiz/urls.py 생성

from django.urls import path, include
from .views import helloAPI, randomQuiz

urlpatterns = [
    path("hello/", helloAPI),
    path("<int:id>/", randomQuiz),
]
# myapi/urls.py
"""myapi URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.urls import path, include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('quiz/', include('quiz.urls')),
]

quiz 폴더에 생성한 url과 기본 myapi의 url은 다른 파일이다.

quiz 폴더에 있는 것은 quiz 앱에 대한 url을 관리해주는 것이고, myapi에 있는 것은 전체 프로젝트에 대한 url을 관리하는 것이다.

위와 같이 quiz 폴더의 url을 먼저 설정하고 myapi의 url에 연동하는 방식으로 진행했다.

기존 디폴트로 되어 있는 url(r'^admin', admin.site.urls) 방식의 정규표현식 형태는 레거시한 방식이기에 우리는 path 형식으로 진행한다.

7) admin 추가

# quiz/admin.py
from django.contrib import admin
from .models import Quiz

admin.site.register(Quiz)

장고는 기본적으로 웹관리자를 위한 admin 패널을 제공해주는데 여기서 쉽게 데이터를 추가하고 삭제할 수 있게 admin에 해당 quiz 모델을 추가해준다.

8) makemigrations & migrate

> python manage.py makemigrations
> python manage.py migrate

업데이트 된 모델 즉 데이터베이스에 대해 설정해주는 코드이다.

9) 결과

helloApi:

randomQuiz:

반응형