이메일 유효성 검사하기

email-validator 를 사용하여 이메일 유효성 검사하기

만들고자 하는 것

이메일이 유효한지 검사(validation)

이메일 주소 형식이 맞는지 검사하는 것은 매우 빈번한 상황이다. 이메일이 필요한 곳에서는 꼭 필요로 하기 때문이다. 이메일 유효 검사를 위해서 다양한 regex 표현식이 있지만 이번 포스팅에서는 이를 직접 만들지 않고 email-validator 를 사용하여 이메일 유효 검사를 해보고자 한다.

만들기

email-validator 설치

pip install email-validator

SignUpRequest 생성

db/schemas.py 파일에 SignUpRequest 추가한다. 회원가입 시 받을 객체이다.

from pydantic import BaseModel, EmailStr

...

class SignUpReqeust(BaseModel):
    username: str
    email: EmailStr
    full_name: str

API 추가

@app.post('/api/users')
async def user_create(user: SignUpReqeust):
    return user

docs 에 접근해서 email 이 user@example.com 인 값으로 테스트해보면 정상적으로 반환이 된다.

21-1.png

21-2.png

그러나 email 을 user@examplecom 으로 변경해서 요청하면 422 가 Status Code 로 반환되며 에러 메시지가 반환이 된다.

21-3.png

21-4.png

테스트 케이스 작성

매번 docs 에 접근해서 테스트를 해볼 수는 없기에 테스트 케이스를 작성하는 것이 좋다.

테스트하고자하는 것은 이메일 유효성 검사 성공실패이다. 우선 간단한 데이터를 가지고 테스트하고 추후 필요에 따라 테스트 데이터를 추가하면 된다.

db/test_schemas.py 파일 추가한다.

from unittest import TestCase

from pydantic.error_wrappers import ValidationError

from db.schemas import SignUpRequest


class SchemasTest(TestCase):
    def test_sign_up_email_validation_fail(self):
        user_dict = {
            'username': 'test',
            'email': 'test',
            'full_name': 'test',
        }
        with self.assertRaises(ValidationError) as e:
            user = SignUpRequest(**user_dict)
        self.assertEqual(e.exception.errors()[0]['loc'][0], "email")
        self.assertEqual(e.exception.errors()[0]['msg'], "value is not a valid email address")

    def test_sign_up_email_validation_success(self):
        user_dict = {
            'username': 'test',
            'email': 'test@example.com',
            'full_name': 'test',
        }
        user = SignUpRequest(**user_dict)
        self.assertEqual(user.dict(), user_dict)

email-validation 을 사용해서 간단하게 이메일 유효성 검사하는 로직을 추가해보았다.


패스워드 암호화하기
암호화된 패스워드 property 추가하기
NCloud LB & SourcePipeline 구축하기
tech collection 서비스 성능 개선하기
Selenium 복권 구매 자동화 만들어보기
디자인 패턴
책 리뷰
블로그 챌린지