March 07, 2021
본 포스트는 인프런의 플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택] 강의를 듣고 내용을 정리한 것입니다. 퀴즈 모델에 관한 api를 만들어봅니다.
가상환경을 설정하는 명령어는 다음과 같습니다.
// 가상환경 설정
python3 -m venv venv(본인의 가상환경 이름)
// 가상환경 활성화
source venv/bin/activate
그리고 Django project를 cli로 생성합니다.
// 프로젝트 생성 (.을 꼭 적어야함)
django-admin startproject myapi .
python manage.py startapp quiz
// 모든 호스트 허용
ALLOWED_HOSTS ['*']
// 타임존 변경
TIME_ZONE = 'Asia/Seoul'
// 스태틱 파일 경로 추가
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
// INSTALLED_APPS에 'quiz', 'rest_framework' 추가
// migration 파일 생성
python manage.py makemigrations
// migration 진행
python manage.py migrate
// 서버 구동
python manage.py runserver
여기까지 하면 기본적인 서버를 만들었습니다.
// 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()
// serializers.py
from rest_framework import serializers
from .models import Quiz
class QuizSerializer(serializers.ModelSerializer):
class Meta:
model = Quiz
fields = ('title', 'body', 'answer')
Model과 Serializer를 만들었으니, 이제는 실제로 api를 만들어봅니다.
// quiz/views.py
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 randomQuiz(request, id):
totalQuizs = Quiz.objects.all()
// sample의 두번째 인자는 length
randomQuizs = random.sample(list(totalQuizs), id)
// serializer에 many=True를 주면, 다수의 데이터도 직렬화해줍니다.
serializer = QuizSerializer(randomQuizs, many=True)
return Response(serializer.data)
myapi내의 urls.py
는 전체 app에 대한 url을 관리하고, quiz/urls.py
는 quiz app에 대한 url만 관리합니다.
// quiz/urls.py
from django.urls import path, include
from .views import randomQuiz
urlpatterns = [
path("<int:id>/", randomQuiz)
]
// myapi/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('quiz/', include('quiz.urls')),
]
// quiz/admin.py
from django.contrib import admin
from .models import Quiz
# Register your models here.
admin.site.register(Quiz)
model이 변경되었기 떄문에 migration을 한번 더 진행합니다.
python manage.py createsuperuser
python manage.py runserver
api가 잘 작동하는 것을 확인할 수 있습니다!
이렇게 django framework로 model 생성 및 api를 만들어보았습니다. 코드를 따라치다가 원리가 궁금해서 내용을 정리해보았습니다. 다음에는 flutter app부분도 내용을 정리할까 합니다.
참고
INSTALLED_APPS는 Django와 함께 딸려오는 다음의 앱들 등을 포함합니다.
그외 앱들 …
Django 인스턴스에서 활성화된 모든 Django application들의 이름을 담고 있습니다.
참고
Django framework는 기본적으로 SQLite를 사용하도록 구성되어 있습니다. migrate 명령어를 실행하면 INSTALLED_APPS를 참고해 필요한 데이터베이스 테이블을 생성합니다.
class CharField(max_length=None, **options)
class TextField(**options)
class IntegerField(**options)
참고
쿼리셋, 모델 인스턴스 등의 복잡한 데이터를 JSON, XML 등의 컨텐츠 타입으로 쉽게 변환시켜주는 역할.
여기서는 Django의 모델 데이터를 JSON 타입으로 바꿔주는(직렬화) 코드(클래스)
이 class는 Serializer
class와 같지만 다음 차이점이 있습니다.
.create()
, .update()
메서드를 기본적으로 가지고 있습니다.따라서, 간단하게 Serializer를 만들 때 사용됩니다.
참고
프론트엔드 개발자로서 view란 view template을 의미하는 줄 알았지만, Django에서의 view function은 Web request를 받고 Web response를 return하는 역할을 합니다. express framework의 route와 유사하다는 생각이 들었습니다.