jc.jang

9강 로그인 아이디로 이메일 사용하기 본문

Django/Django - 인증편

9강 로그인 아이디로 이메일 사용하기

jangstory 2019. 9. 2. 19:05

주제

  • 로그인 아이디로 이메일을 사용한다.

노트

  • AbstractUser 유저 모델 클래스에서 username필드를 아이디로 사용한다.
  • 그리고 여기 있는 email은 필수 값이 아닌 필드이므로 email필드로 로그인하는 것이 아니라
  • username필드에 test123@gmail.com같은 값을 입력하여 로그인하는 것이다.

 

  • username에 이메일 값을 입력해도 되지만, 해당 필드의 유효성 검사를 UnicodeUsernameValidator에서 한다.
  • 올바르지 않은 이메일 값도 회원가입이 가능하다.
  • 정확한 유효성 검사 로직을 작성해보자. 이 작업은 반드시 뷰가 아니라 폼에서 작성해야 함

 

  • accounts/forms.py
from django.contrib.auth.forms import UserCreationForm
from django.core.validators import validate_email


class SignupForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].validators = [validate_email]
        self.fields['username'].help_text = '이메일 형식을 입력하세요.'
        self.fields['username'].label = 'Email'

    def save(self, commit=True):
        user = super().save(commit=False)
        user.email = user.username
        if commit:
            user.save()
        return user
  • UserCreationForm을 상속 받아서 __init__과 save를 재정의함
  • fields의 validators, help_text, label등을 재정의함
  • django/core/validators.py에서 구현된 validate_emial 메소드를 사용하여 올바른 이메일인지 확인한다.
  • user.emial 필드에 user.username 값을 넣어준다.

 

질문

  • form field들 접근하는? 방법에 대해 알고 싶다. 예를 들면 __init__에서 self.fields라든지...
  • form에 forms, model 등 알아봐야할게 많은 것 같다.

요약

  • username 필드를 그대로 사용하되 email validators를 사용한다.
  • 유효성 검사 로직은 뷰가 아니라 폼에서 작성한다.

날짜

  • 오후 6시, 20190902

 

Comments