A ship in harbor is safe, but that is not what ships are built for.

개발일지/AI 캠프

내일배움캠프 AI - 71일차 TIL, 2022.12.09

플리피나리 2022. 12. 11. 20:16
반응형

스파르타 코딩클럽 내일배움캠프 AI 웹개발자양성과정 3회차

2022.12.09. 71일차 - TIL

 

 

User 모델 커스텀

class User(AbstractBaseUser, PermissionsMixin):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female'),
        (2, 'not specified'),
    )
        
    email = models.EmailField(max_length=255, unique=True)
    user_nickname = models.CharField(max_length=20, blank=False)
    user_phone = models.IntegerField(blank=False)
    user_gender = models.IntegerField(choices=GENDER_CHOICES, default=2)
    user_introduce = models.CharField(max_length=40, blank=True, null=True)
    user_profile_img = models.ImageField(blank=True, upload_to="profile_img/", default="profile_img/profile.jpeg", null=True)
    user_birth = models.DateField(null=True)
    user_address = models.CharField(max_length=20, blank=False) 
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = [user_nickname, user_phone, user_address]

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin
  • REQUIRED_FIELDS에 있는 값들은 Blank=False로 설정 해야한다.
  • AbstractBaseUser 상속으로 인해 password 컬럼은 생성할 필요가 없다.
  • USERNAME_FIELD = 'email': AbstractBaseUser를 상속받아 사용하기 때문에 일반적인 로그인과정과 비교하면 id가 username 필드가 된다. email이 user필드의 역할을 해야하기 때문에 email로 수정한다.
  • str(self) : admin페이지 로그인정보 email로 표현한다.
  • def has_perm(self, perm, obj=None) : True를 반환하여 권한이 있음을 알린다. Ojbect를 반환하는 경우 해당 Object로 사용 권한을 확인하는 절차가 필요하다.
  • def has_module_perms(self, app_label) : True를 반환하여 주어진 앱(App)의 모델(Model)에 접근 가능하도록 한다.
  • def is_staff(self) : True가 반환되면 장고의 관리자 화면에 로그인 할 수 있다.

Unautorized 토큰 불러오지 못함

 

원인

  • serializer.py에서 해당 user의 값을 가져오는 지정된 fields에 token부재

해결방법

  • fields값을 all로 변경
반응형