목차
1. basic Setting
저는 m1 mac을 사용중이며 아래와 같은 환경에서 진행했습니다. 간단한 api 생성을 목적으로 하기 때문에 기본적인 프레임워크와 라이브러리만 사용하겠습니다.
- 파이참(커뮤니티) IDE (파이참을 사용해서 프로젝트에 발생하는 라이브러리와 메소드를 단축키만으로 가볍게 설치 할 수 있는 등의 편리함이 있습니다.)
- python ver 3.8
- pip list 입니다. 터미널에서 아래의 명령어로 설치해줍니다.
# pip list
pip install django
pip install django_extensions
pip install djangorestframework
- django-admin startproject [project_name]; 디렉토리 이동
python manage.py migrate
python manage.py runserver
locatlhost:8000 링크로 접속해서 아래와 같은 화면이 뜬다면 기본 django 세팅을 마쳤습니다.
2. Modeling(기본설계)
최종 목표는 drf로 아주 간단한 커뮤니티의 api 를 만드는 것입니다.
커뮤니티(게시판)에서 기본이자 중심인 모델을 정의하고, 그에 따라서 개발을 이어나가면 됩니다.
간단하게 아래의 app과 모델을 사용할 것입니다.
- 먼저 게시판 서비스를 이용할 유저를 정의 해줍니다. 한 app 으로 정의하고 클래스를 별도로 모델을 정의해주어도 상관없지만, 기능의 확장성과 변경성을 위해서 다른 앱으로 분기하는 것이 좋다고 생각합니다.
3. App 생성
터미널에서 유저와 게시판 app을 만들어줍니다.
- python manage.py startapp [시작할 app 이름]
python manage.py startapp user
python manage.py startapp board
- settings의 INSTALLED APP에 rest_framework, user, board 를 넣어줍니다.
4. Model 생성
이제 정의한 모델 관계를 다시 생각해보고 생성해보겠습니다.
- User모델은 user에 관한 정보.
- Category 모델은 카테고리 이름.
- Post 모델은 게시글의 제목과 내용 + user와 category를 foreignkey 필드로 지정해서 user모델과 category 가 삭제되면 모델 인스턴스도 삭제되게 합니다.
- 예를 들면, 게시판의 유저A가 여러개의 글을 작성했다고 할 때, 유저 A가 삭제될 경우 작성된 게시글도 삭제 되는 것입니다.
- 각 모델의 필드값을 지정할때 foreignkey 를 설정해서 종속관계를 나타내어 줄 수 있습니다.
- user > models.py
from django.db import models
class User(models.Model):
email = models.EmailField(verbose_name='이메일', unique=True)
nickname = models.CharField(verbose_name='닉네임', max_length=8, null=False, unique=True)
first_name = models.CharField(verbose_name='이름', max_length=5, null=False)
last_name = models.CharField(verbose_name='성', max_length=5, null=False)
phone = models.CharField(verbose_name='휴대폰', max_length=11, null=True, blank=True)
class Meta:
verbose_name = '유저'
verbose_name_plural = verbose_name
def __str__(self):
return self.email
- board > models.py
from django.db import models
from user.models import User
class Category(models.Model):
category_name = models.CharField(verbose_name='카테고리이', max_length=10)
class Meta:
verbose_name = '카테고리명'
verbose_name_plural = verbose_name
def __str__(self):
return self.category_name
class Post(models.Model):
user = models.ForeignKey(User, verbose_name='유저', on_delete=models.CASCADE)
category = models.ForeignKey(Category, verbose_name='카테고리', on_delete=models.CASCADE)
title = models.CharField(verbose_name='제목', max_length=10)
content = models.TextField(verbose_name='내용')
class Meta:
verbose_name = '게시글'
verbose_name_plural = verbose_name
def __str__(self):
return self.title
게시물을 만든 작성자는 User 모델에서 받아오고, 카테고리는 Category 모델에서 받아올 수 있습니다.
이때, 만약 게시글을 작성한 사람이 회원탈퇴나 계정을 삭제 했다고 했을 때, 그 사람이 작성한 게시글도 삭제되게 하려면 on_delete 옵션을 사용하면 됩니다.
foreignkey 필드 옵션
- on_delete = models.CASCADE ; 함께 삭제
- on_delete = models.PROTECT ; 함께 삭제되지 않도록 error발생
- on_delete = models.SET_NULL; 삭제될때 필드값을 null로 변경
- on_delete = models.DEFAULT ; 삭제될때 필드값을 default로 변경
- on_delete = models.SET(User.objects.get(id=1)) ; 삭제될때 필드 값을 set설정으로 맞춰준다.
- on_delete = models.DO_NOTHING ; do not anything
마지막으로 모델을 새로 만들거나 변경사항이 생기면 마이그레이션을 해줍니다.
python manage.py makemigrations
python manage.py migrate
'IT CHANNEL > Python' 카테고리의 다른 글
[DRF 게시판만들기] #4 GenericAPIView & Urls (0) | 2022.03.29 |
---|---|
[DRF 게시판만들기] #3 Serializer, ModelSerializer 개념 및 역할 (0) | 2022.03.20 |
[DRF 게시판만들기] #2.1 ORM, Python Shell 로 Data생성하기 (0) | 2022.03.12 |
[DRF 게시판만들기] #1 Intro (0) | 2022.02.27 |
개발블로그 (0) | 2022.02.27 |