Python
Django - Database Migration Command 요약 정리
올엠
2024. 3. 14. 09:03
반응형
Django는 풀스택 웹 프레임워크로 사용되어진다. 특히 기본 User Auth 기능을 제공하므로 별도의 User 관리 기능을 개발할 필요가 없다.
토큰 인증도 적용이 가능하며 추가로 필요한 컬럼등을 구성하거나 변경하는 것도 가능하므로 유용하게 활용할 수 있다. 그럼 어떤 명령을 사용할 수 있는지 Migration에 대해서 요약 정리해 본다.
* 먼저 명령을 사용전에 마이그레이션을 지원하는 Database는 PostgreSQL, MySQL, SQLite를 지원한다.
* 마이그레이션 명령을 사용하기 위해서는 settings.py에서 활성화를 먼저 해야 한다.

makemigrations
마이그레이션을 진행하기 위한 사전 파일을 생성하는 명령이다.
python3 manage.py makemigrations
명령을 실행하면, migrations 폴더가 생성되며, xxxx_initial.py 마이그레이션 할 내용이 저장된다.
만약 models을 생성하였거나 변경하는 경우 변경할 내용에 맞춰서 파일이 생성된다.


Model에 추가로 변경되는 내용이 있다면, 다시 makemigrations 명령을 하면 다시 변경된 부분을 업데이트한다.
migrate
데이터베이스에 앞서 생성한 파일을 기반으로 마이그레이션을 진행하게 된다.
python3 manage.py migrate

Custom User Model 사용
만약 별도의 USER 모델을 사용한다면, settings.py 를 AUTH_USER_MODEL 을 기입하여 USER 를 조정할 수 있다.
필자의 경우 core에 models에 User 모델에 대한 추가 변경을 아래와 같이 진행하였다.
- 이 작업은 makemigrations 을 하기 전에 먼저 추가되어야 한다.
"""
Database Model
"""
from django.db import models
from django.contrib.auth.models import (
AbstractBaseUser,
BaseUserManager,
PermissionsMixin,
)
class UserManager(BaseUserManager):
"""Manager for users"""
def create_user(self, email, password=None, **extra_fields):
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
""" User in the system"""
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
반응형