(다음 글로 이어지는 시리즈는 Udemy - The Complete Guide to Django REST Framework and Vue JS 강의록임을 밝힙니다.)
1) 가상환경 만들기 (conda, venv whatever you want)
2) pip install django
--> pip install djangorestframework
--> pip freeze > requirement.txt
3) django-admin startproject ebooksapi
4) python manage.py startapp ebooks
5) VS code로 file open하여 작업 시작
6) ebooksapi/ebooksapi/settings.py: INSTALLED_APPS에 rest_framework
, ebooks
추가
7) ebooksapi/ebooks/models.py 작성:
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
# Review Class의 rating에서 별점 1~별점 5를 사용하기 위한 세팅
class Ebook(models.Model):
title = models.CharField(max_length=140)
author = models.CharField(max_length=60)
description = models.TextField()
publication_date = models.DateField()
def __str__(self):
return self.title
class Review(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
review_author = models.ForeignKey(User, on_delete=models.CASCADE)
review = models.TextField(blank=True, null=True) # 별점만 매기는 경우도 있으므로 null=True
rating = models.PositiveIntegerField(validators=[MinValueValidator(1),
MaxValueValidator(5)])
ebook = models.ForeignKey(Ebook,
on_delete=models.CASCADE,
related_name="reviews")
def __str__(self):
return str(self.rating)
8) ebooksapi/ebooks/admin.py 작성: (페이지 열었을 때 admin 페이지에서 관리될 수 있게 할 부분 작성)
from django.contrib import admin
from ebooks.models import Ebook, Review
admin.site.register(Ebook)
admin.site.register(Review)
9) python manage.py makemigrations
하여 models.py 변경사항 저장
10) python manage.py migrate
하여 변경사항 실제로 DB에 적용
(settins에서 만일 mysql을 사용하도록 세팅을 변경했다면, 대소문자의 문제로 migrate이 안되는 경우도 있으니 주의하자. key값은 모두 대문자로 써야 migrate이 된다.)
11) python manage.py createsuperuser
로 admin 계정 생성
12) ebooksapi/ebooks/api/serializers.py 작성:
from rest_framework import serializers
from ebooks.models import Ebook, Review
class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
exclude = ("ebook", )
class EbookSerializer(serializers.ModelSerializer):
reviews = ReviewSerializer(many=True, read_only=True)
# review와 Ebook과의 관계 명시하기 위한 작성
class Meta:
model = Ebook
fields = "__all__"