2021.12.18 - [Study/Django] - [Django] 장고 유저 기능 구현하기 #8 (닉네임 필드 추가하기)
저번 게시글에서는 회원가입에 닉네임 필드를 새로 생성해 넣었는데요.
유효성 검사는 되고 있지 않습니다. 그래서 이번 게시글에서는 Form에 유효성 검사를 넣는 방법에 대해 알아보겠습니다.
아 그전에 현재 회원가입 Form을 보면 영어로 출력이 되는 것을 볼 수 있는데요.
이것을 먼저 고쳐보겠습니다!
Django 기본 언어 한글로 나오게 하기
# settings.py
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko'
위 코드처럼 settings.py 에 보면 기본 LANGUAGE_CODE 값이 'en-us'로 되어있어서 영어로 출력이 되는 것이었는데요.
이를 한글로 바꿔주기 위해 기본 언어를 한국어인 'ko'값으로 바꿔주면 됩니다!
Validator 만들기
일단 어떤 유효성 검사를 할지에 대해 Validator를 먼저 만들겠습니다!
# validators.py
import string
from django.core.exceptions import ValidationError
def contains_special_character(value):
for char in value:
if char in string.punctuation: # string.punctuation에는 특수문자들이 저장되어 있습니다!
return True # 그걸 이용해서 특수문자를 걸러낼 수 있습니다!
return False
class CustomPasswordValidator:
def validate(self, password, user=None):
if (
len(password) < 8 or
not contains_uppercase_letter(password) or
not contains_lowercase_letter(password) or
not contains_number(password) or
not contains_special_character(password)
):
raise ValidationError("8자 이상의 영문 대/소문자, 숫자, 특수문자 조합이어야 합니다.")
def get_help_text(self):
return "8자 이상의 영문 대/소문자, 숫자, 특수문자 조합을 입력해 주세요.(get_help_text)"
def validate_no_special_characters(value):
if contains_special_character(value):
raise ValidationError("특수문자를 포함할 수 없습니다.")
django에서 제공하는 ValidationError와 string의 string.punctuation을 사용해서 비밀번호 유효성 검증과 아이디에 특수문자 포함 여부를 확인하는 validator를 만들었습니다.
settings.py에 validators 등록하기!
# settings.py
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
settings.py에 가면 기본적으로 django에서 제공하는 유효성 검증이 들어있습니다.
이것을 사용해도 좋지만 이번엔 직접 만든 유효성 검증을 사용할 것이기 때문에 다 지워주고 직접 만든 validator를 등록해보겠습니다.
# settings.py
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "coplate.validators.CustomPasswordValidator",
}
]
위처럼 앱 이름. 파일명. 클래스(함수) validator명으로 설정해주면 됩니다.
현재 저는 coplate라는 앱에 validators.py 파일 안에 있는 CustomPasswordValidator Class를 사용해주기 위해 위처럼 사용해주었습니다.
위처럼 한글로 출력이 되며, 설정한 유효성 검증 또한 제대로 작동하는 것을 볼 수 있습니다!
다만 현재 다른 곳에서 오류가 나도 비밀번호까지 지워지는 부분이 있는데 이것도 고쳐보겠습니다!
비밀번호 지워지는 것을 방지해보자!
# settings.py
ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = True
위 코드처럼 settings.py에 ACCOUNT_PASSWORD_INPUT_RENDER_VALUE 값을 True로 주면 됩니다.
ACCOUNT_PASSWORD_INPUT_RENDER_VALUE의 default값은 False로 있으면 값이 지워지지만 True로 설정해줄 시 적은 비밀번호가 지워지지 않습니다.
'Study > Django' 카테고리의 다른 글
[Django] 장고 유저 기능 구현하기 #11 ( 비밀번호 관리 기능) (0) | 2021.12.22 |
---|---|
[Django] 장고 유저 기능 구현하기 #10 (이메일 인증 기능) (0) | 2021.12.20 |
[Django] 장고 유저 기능 구현하기 #8 (닉네임 필드 추가하기) (0) | 2021.12.18 |
[Django] 장고 유저 기능 구현하기 #7 (로그인 기억하기) (0) | 2021.12.17 |
[Django] 장고 유저 기능 구현하기 #6 (이메일로 로그인 하기 기능 구현) (1) | 2021.12.17 |