Django 쇼핑몰 만들기-1

Sang Jun Park·2020년 12월 27일
1

포트폴리오-STREET

목록 보기
1/6

개인 포트폴리오로 쇼핑몰을 만들기로 했다.
앞으로 그날 그날 작업한 이력과 새로 알게된 점들을 글로 남기고자 이 시리즈를 시작한다.


오늘 한 일

1. 전반적인 쇼핑몰의 ERD를 그렸다.

DB의 구조를 시각화하여 개발하는데 이해를 돕고자,
나중에 포트폴리오 자료에 첨부하려고 그렸다.

ERD를 그리는데 추가적인 소프트웨어를 설치하고 싶지 않아서
웹으로 그릴 수 있는 ERDCloud를 사용했다.

  • 추가로 ERD 그리는 방법에 대해 공부를 더 할 필요가 있겠다 싶었다.
  • 그리고 나중에 테이블명세서 같은 것도 만들어보면 도움이 되지 않을까

2. Project를 생성했고, account app을 생성했다.
개인적으로 무언가 이름을 짓는걸 꽤 어려워한다. (게임 캐릭터 이름같은...)
아무튼, 쇼핑몰 이름은 STREET99이 될거다. 요즘 브루클린 나인나인을 보니까


3. accountapp의 models.py와 admin.py를 작성했다.

  • AbstractBaseUser와 BaseUserManager를 상속받아 클래스 메소드를 오버라이딩 하여
    커스터마이징을 했다.

  • 이렇게 커스터마이징한 User 모델을 사용하기위해 settings.py에 설정값을 넣어줬고

  • admin.py에 UserAdmin을 상속받아 화면을 커스터마이징 하였다.

    여기를 보며 작업했다.



오늘 알게된 내용

  1. BaseUserManager를 상속받는 UserManager 클래스를 정의하며...
    AbstractBaseUser를 상속받는 User모델에서 내가 추가한 필드들(전화번호, 생년월일)을
    UserManager의 create_user()와 create_superuser()에 넘겨주는데 막혔었다.
    기존에 내가 만들던 Model들은 단순히 email, username, password가 전부였으니까.

    문제:
    terminal에서 createsuperuser 명령어를 통해 어드민 계정을 생성하는데
    email, username은 잘 받다가 갑자기 date_of_birth라는 내가 user model에 추가한 field가
    'NOT NULL constraint failed'를 발생하며 명령어가 취소되었다.


    해결: create_user(), create_superuser()에
    def create_user(self, email, username, password, **extra_fields):
     def create_superuser(self, email, username, password, **extra_fields):

    와 같이 파라미터로 내가 User Model에서 추가한 fields들을 넘겨주었고
    create_superuser()의 경우 extra_fields.setdefault()를 통해 default값을 직접 지정하여 해결했다.


models.py

class UserManager(BaseUserManager):
    def create_user(self, email, username, password, **extra_fields):
        	.
            	.
                .
               
        user = self.model(
            email = self.normalize_email(email),
            username = username,
            **extra_fields
        )
        	.
        	.
        	.
        

    def create_superuser(self, email, username, password, **extra_fields):
        extra_fields.setdefault('phone_number', '00000000000')
        extra_fields.setdefault('date_of_birth', '1900-01-01')
        user = self.create_user(
            email = self.normalize_email(email),
            username = username,
            password = password,
            **extra_fields
        )
        	.
        	.
        	.
        
        
class User(AbstractBaseUser):
    objects = UserManager()

    email = models.EmailField(max_length=60, unique=True)
    username = models.CharField(max_length=20, unique=True)
    phone_number = models.CharField(max_length=20)
    date_of_birth = models.DateField(max_length=8)
    created_at = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    		.
        	.
        	.
        

고민해야할 부분

  • 전화번호와 생년월일을 어떻게 전처리하고 저장할지
profile
Django 개발자가 되고싶은 사람

0개의 댓글