장고 심화 강의 타임어택 문제내기😎 : 팀원들과 함께 할 타임어택 문제를 내가 출제해보기로 했다!!
<커스터마이징 장고 회원가입&로그인>
<순서>
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
회원가입 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
TypeError: create_superuser() missing 1 required positional argument: 'username'
커스터마이징 user 모델을 작성하는데 여러 필드를 추가하면서 위와 같은 오류가 발생하였다!!
REQUIRED_FIELDS = ['date_of_birth', 'username']
REQUIRED_FIELDS에 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에서 바로 중복된 데이터에 대해 오류 문구를 띄워준다!!