Published on

Django Validator로 유효성검사하고 manage 로 data를 Dump Load 하기

Authors

AI 실행 전에 사용자의 입력을 받는 부분이 필요했습니다.

입력(input)은 django 의 form 을 통해서 입력을 받는데, 아무 데이터나 기입되는 것은 막아야합니다. 그럴 수 있게 해주는 것이 유효성의 기능이며, django core의 validator를 통해서 간단하게 유효성검증 로직을 구현할 수 있었습니다.

이번 글에서는 유효성 검증을 통해서 원하는..혹은 제대로 된 값을 입력받는 방법과 데이터를 추출하고 더미데이터를 쉽게 생성하는 방법 까지 간단하게 기록합니다.

유효성 검증

  • django 를 이용한 필드 유효성 검증에는 두 가지 방식이 있습니다.
    • 필드를 정의할 때 필요한 옵션을 설정하기
    • 별도의 validator(유효성 검사기)를 추가하기
  • (참고) null VS blank의 차이
    • null: 데이터베이스에 빈 값을 null로 저장하는 것을 허용합니다.
    • blank: 문자열 기반 필드에서 True로 설정하면 빈 문자열을 저장할 수 있습니다.

Validator (유효성 검사기의 역할)

Validator는 임의의 값을 받아 내부 기준을 충족하지 않으면 ValidationError를 발생시키는 함수입니다.

Django에서 제공하는 Built-in Validator 공식 문서 및 참고

Django Validators | Django documentation

  • django.core.validators를 불러와서 원하는 필드에 validators 옵션을 추가할 수 있습니다.
django_validator_seeding_1
  • 실행 후 정상적으로 에러 메시지를 확인할 수 있습니다. django_validator_seeding_2

Writing Custom Validator

Django에서 제공하는 built-in validator 대신 직접 validator 파일을 만들어 조건을 설정하고, 에러를 발생시킬 수 있습니다.

공식 문서 상단에 친절하게 코드 예시가 나와 있습니다. django_validator_seeding_3

위의 예시에서 보면 content 칸에 어떤 텍스트든 입력할 수 있게 되어 있습니다.

저는 여기서 숫자만 입력하는 것을 막고 싶었습니다. (제가 가끔 귀찮을 때 숫자만 대충 입력할 수 있기 때문에) 직접 validator를 만들어 보고 싶기도 했고, 이 기능이 감성 분석(자연어 처리)에 활용될 수 있을 것 같았습니다.

따라서 validators 파일을 생성하고 django.core.exceptionsValidationError를 불러왔습니다.

처음 코딩을 배우며 알고리즘 문제를 풀 때 사용했던 isdigit() 함수를 활용했습니다. 그리고 에러 메시지를 지정했습니다.

django_validator_seeding_4
  • 이 함수를 import하여 아까 작성한 validators 옵션에 추가했습니다.
django_validator_seeding_5
  • 정상적으로 에러가 발생했습니다.
django_validator_seeding_6

JSON으로 추출 및 관리하기 with Dumpdata / Loaddata

  • 데이터를 JSON 파일로 추출할 수 있습니다. 모델의 데이터를 관리하고 테스트하기에 매우 유용합니다. 아래는 posts 모델을 추출한 예제 코드 입니다.
# 한 줄로 출력
python3 manage.py dumpdata posts > posts_data.json

# 들여쓰기 적용
python3 manage.py dumpdata posts --indent=2 > posts_data.json

  • 이렇게 하면 JSON 형태로 데이터가 추출되며, 수정한 데이터를 다시 서버에 로드할 수 있습니다.
# 데이터 불러오기
python3 manage.py loaddata posts_data.json

대용량 데이터를 Seeding

  • 우선 라이브러리를 통해서 제공하는 seed 기능을 설치해야 합니다.
pip install django-seed

  • 그리고 settings.py 파일의 INSTALLED_APPSdjango_seed를 추가합니다. 터미널에서 아래 명령어를 사용하여 원하는 만큼의 데이터를 생성할 수 있습니다.
python3 manage.py seed posts --number=50

error : psycopg2-binary support for M1 chipset

  • 만약 psycopg2 모듈을 찾을 수 없다는 에러가 발생하면, 해당 모듈을 설치해야 합니다. 에러 메시지는 다음과 같습니다:
    • No module named 'psycopg2'
    • No matching distribution found for psycopg2
  • psycopg2psycopg2-binary를 설치하려고 시도했지만 해결되지 않았습니다.
django_validator_seeding_7
  • 결국 GitHub에서 해결 방법을 찾았습니다

  • brew install postgresql 명령어를 사용하여 PostgreSQL을 설치한 후, pip install psycopg2로 해결되었습니다.

  • 정상적으로 데이터가 생성되었습니다.

django_validator_seeding_8
  • hongreat 블로그의 글을 봐주셔서 감사합니다!^^
  • 내용에 잘못된 부분이나 의문점이 있으시다면 댓글 부탁 & 환영 합니다~!
  • (하단의 버튼을 누르시면 댓글을 보거나 작성할 수 있습니다.)
Buy Me A Coffee