[DRF] <Level Two> Django REST Framework - 1. 초기 세팅

Alex of the year 2020 & 2021·2020년 9월 2일
0

Django Rest Framework

목록 보기
5/15
post-thumbnail

(다음 글로 이어지는 시리즈는 Udemy - The Complete Guide to Django REST Framework and Vue JS 강의록임을 밝힙니다.)


The objectives of EbooksAPI

  • get list of all the ebooks in our app's database
  • add new ebooks
  • leave reviews about the available ebooks

setup

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__"
profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글