💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    8. 사용자 모델 커스터마이징 | ✅ 저자: 이유정(박사)

    managers.py 는 “모델이 갖고 있는 데이터베이스 조회/생성 로직” 을 모아두는 곳

    1. Django 모델과 매니저(Manager)의 역할 분리
    • models.py

      • 스키마 정의: 테이블 필드, Meta 옵션, __str__
      • (필요시) 인스턴스 메서드 오버라이드: 예를 들어 save()를 커스터마이징
    • managers.py

      • 매니저(Manager) 클래스 정의: models.Manager 또는 BaseUserManager 를 상속
      • 테이블 레벨 로직(factory 메서드, 기본 질의(query) 메서드 등)

    커스텀 매니저 메서드가 실제로 어떻게 동작하고, 왜 필요한지 예시: create_user() / create_superuser() 회원가입과 슈퍼유저 생성을 편리하게 도와주는 메서드

    myapp/managers.py class CustomUserManager(BaseUserManager):

    • Django는 기본적으로 username을 기준으로 사용자를 생성합니다.
    • 하지만 우리는 email을 로그인 ID로 사용하고 싶으니,
      그 방식에 맞는 사용자 생성 함수들을 직접 만들어줘야 합니다.

    create_user() 메서드 : 일반 사용자 생성 메서드

    def create_user(self, email, password=None, **extra_fields):
    
    • 이메일이 없으면 오류
    • 비밀번호는 set_password()를 통해 해시 처리
    • DB에 저장하고 사용자 인스턴스 반환
    • 회원가입 시 이 함수가 호출됩니다.

    create_superuser() 메서드:관리자(슈퍼유저) 생성 메서드

    def create_superuser(self, email, password=None, **extra_fields):
    
    • 관리자이므로 is_staff, is_superuser 를 반드시 True로 지정
    • 조건이 맞지 않으면 오류 발생
    • 내부적으로 create_user()를 호출해서 관리자 계정 생성 이 메서드는 python manage.py createsuperuser 명령에서 사용됩니다.

    myapp/models.py CustomUser 모델 정의: 실제 사용자 모델 구조를 정의

    class CustomUser(AbstractBaseUser, PermissionsMixin):
    
    • AbstractBaseUser: 비밀번호 저장, 인증 관련 기능 제공
    • PermissionsMixin: 권한/그룹 관련 기능 제공

    email = models.EmailField(...):로그인 ID로 사용할 이메일 필드 정의

    • unique=True: 이메일이 중복되지 않게 강제함
    • 이 필드를 로그인 기준(USERNAME_FIELD)으로 쓸 예정

    is_staff, is_active: 로그인 가능 여부 및 관리자 여부 설정

    • is_staff: 관리자 사이트 접근 가능 여부
    • is_active: 계정 비활성화 여부

    objects = CustomUserManager():사용자 생성 로직을 CustomUserManager로 연결

    • 이걸 생략하면 create_user() 같은 커스텀 메서드를 사용할 수 없습니다
    • 매우 중요!

    USERNAME_FIELD = 'email':로그인할 때 사용할 ID 필드 지정

    • 기본값은 username인데 우리는 email로 바꿔주는 것

    settings.py 설정 추가: 프로젝트 전체에 새 사용자 모델을 알려주는 설정

    • 'app'은 해당 모델이 정의된 앱 이름
    • 이 설정을 하면 Django는 auth.User 대신 app.CustomUser 를 기본 사용자 모델로 사용합니다.
    • ⚠️ 최초 마이그레이션 전에 반드시 설정되어야 합니다.
    TOP
    preload preload