내일배움캠프 52일차

김서영·2022년 11월 15일
0

내일배움캠프 TIL

목록 보기
54/85
post-custom-banner

1. 오늘 내가 한 일!

장고 심화 강의 타임어택 문제내기😎 : 팀원들과 함께 할 타임어택 문제를 내가 출제해보기로 했다!!

2. 타임어택 문제

<커스터마이징 장고 회원가입&로그인>

  1. 회원가입(email, password, usrname, 생년월일로 회원가입&해싱되어 있어야 함)
  • email 형태 확인 메세지(email 형태로 작성 안하면 오류메세지)
  • 동일한 email로 회원가입 하면 오류 메세지
  • 동일한 username으로 회원가입 하면 오류 메세지
  • password 8자 미만이면 오류 메세지
  • username 1자 이하이면 오류 메세지
  1. 로그인(email, password로 로그인)
    로그인 되면 "가입 완료!"메세지
    로그인 안되면 에러

<순서>
1. 기본 설치
2. settings.py 수정
3. urls.py 작성
4. models.py 작성 및 수정
5. admin.py 작성 및 수정
6. serializers.py 작성
7. views.py 작성

drf 커스어마이징 참고자료 : https://docs.djangoproject.com/en/4.1/topics/auth/customizing/
simple-jwt 참고자료 : https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html




3. 문무해알

1. 회원가입 validate 함수 사용법

- 문제점

- 무엇을 몰랐는지(내가 한 시도)

회원가입 validate 함수 사용법

- 해결 방법

- 알게 된 것

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
    
    def create(self, validated_data):
        user = super().create(validated_data)
        password = user.password
        user.set_password(password)
        user.save()
        return user
    
    def validate(self, data):
        if not len(data.get("username", "")) >= 2:
            raise serializers.ValidationError(
                detail={"error": "username의 길이는 2자리 이상이어야 합니다."}
            )
        if not len(data.get("password", "")) >= 8:
            raise serializers.ValidationError(
                detail={"error": "password의 길이는 8자리 이상이어야합니다."}
            )
        return data

2. TypeError: create_superuser() missing 1 required positional argument: 'username'

- 문제점

TypeError: create_superuser() missing 1 required positional argument: 'username'

- 무엇을 몰랐는지(내가 한 시도)

커스터마이징 user 모델을 작성하는데 여러 필드를 추가하면서 위와 같은 오류가 발생하였다!!

- 해결 방법

REQUIRED_FIELDS = ['date_of_birth', 'username']
REQUIRED_FIELDS에 username을 추가했더니 오류가 사라졌다!!
추가한 필드를 여기에 추가해 주어야 한다고 한다!

- 알게 된 것

커스터마이징 모델에 대해 어떤식으로 작성해야 할지 잘 알게 되었다!

3. django.db.utils.IntegrityError: UNIQUE constraint failed: users_user.username

- 문제점

django.db.utils.IntegrityError: UNIQUE constraint failed: users_user.username

- 무엇을 몰랐는지(내가 한 시도)

오류를 해석해 봤을 때 unique에대한 제한이 실패되었다는 것을 보아 같은 정보가 2번 db에 저장되었다고 생각했다.

- 해결 방법

그래서 db을 지웠다가 다시 깔아보니 문제가 해결되었다!!

- 알게 된 것

내가 작성한 여러 제한(제약)에 대해 잘 생각하고 코드 작성&테스트를 해보자!!

- 문제점

- 무엇을 몰랐는지(내가 한 시도)

models.py에서 unique 사용

class User(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    username = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=50)
    date_of_birth = models.DateField()
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

- 해결 방법

- 알게 된 것



model에서 unique를 사용하면 따로 설정을 안해줘도 model에서 바로 중복된 데이터에 대해 오류 문구를 띄워준다!!

profile
개발과 지식의 성장을 즐기는 개발자
post-custom-banner

0개의 댓글