[Django] DRF - validation

김영환·2021년 3월 16일
1

django rest framework

목록 보기
2/4
post-thumbnail

DRF의 validation에 대해서 알아보자.
validation은 brandi 인턴기간에서 flask를 사용하면서 validation 을 따로 관리해줘서 뭔가 좀더 체계적이고, 확장성에 좀 더 좋을꺼같다는 생각을 했었는데. 과연 DRF는 얼마나 다른지 확인해보자

클라이언트에서 전달된 데이터를 DB에 저장하기 전에 .is_valid() 매소드를 통해 데이터 유효성 검사를 기본적으로 진행하게 됩니다.

>>> serializer = UserSerializer(data={'email': 'name#gmail.com', 'password' : '1234'})
>>> serializer.is_valid()
False
>>> serializer.errors
{'email': [ErrorDetail(string='Enter a valid email address.', code='invalid')]}

😃 model.py 에서 emailField를 사용했기 때문에 @가 포함되지 않으면 validation error가 발생합니다.

>>> serializer = UserSerializer(data={'email': 'name@1234.1234', 'password' : '1234'})
>>> serializer.is_valid()
True
>>> serializer.errors
{}

😡 하지만 @의 유무만 판단하고 대부분의 에러핸들링은 안되는것으로 봐서 customized validator 가 필요할꺼같다...

customized Validator

  • object-level-validator : instance 전체에 적용
  • field-level-validator : field 단위로 적용

1. Field-level-validation

2. Object-level-validation

  • 둘의 차이라고 하면 Field-level-validation 은 함수명을 정해줄때 validate_{field명} 으로 정의해줘야되며, field 하나에 대해서면 데이터 분석을 하기 때문에 효율적(?) 이라고 생각한다.
  • Object-level-validation 은 기존에 validtor 하던 방식과 비슷하게 attrs['{field명}'] 으로 데이터 분석을 하면된다.

Error message

raise serializers.ValidationError('This email already exists') 를 이용해서 처리해주었고, eamliField 에서는 따로 RegexValidator(pattern,message .. ) 형식으로 따로 처리해주었다.

이메일 중복검사 error message

이메일 Validator

0개의 댓글