- Published on
Django Validator로 유효성검사하고 manage 로 data를 Dump Load 하기
- Authors
- Name
- hongreat
- ✉️hongreat95@gmail.com
AI 실행 전에 사용자의 입력을 받는 부분이 필요했습니다.
입력(input)은 django 의 form 을 통해서 입력을 받는데, 아무 데이터나 기입되는 것은 막아야합니다. 그럴 수 있게 해주는 것이 유효성의 기능이며, django core의 validator를 통해서 간단하게 유효성검증 로직을 구현할 수 있었습니다.
이번 글에서는 유효성 검증을 통해서 원하는..혹은 제대로 된 값을 입력받는 방법과 데이터를 추출하고 더미데이터를 쉽게 생성하는 방법 까지 간단하게 기록합니다.
유효성 검증
- django 를 이용한 필드 유효성 검증에는 두 가지 방식이 있습니다.
- 필드를 정의할 때 필요한 옵션을 설정하기
- 별도의 validator(유효성 검사기)를 추가하기
- (참고)
null
VSblank
의 차이null
: 데이터베이스에 빈 값을null
로 저장하는 것을 허용합니다.blank
: 문자열 기반 필드에서True
로 설정하면 빈 문자열을 저장할 수 있습니다.
Validator (유효성 검사기의 역할)
Validator는 임의의 값을 받아 내부 기준을 충족하지 않으면 ValidationError
를 발생시키는 함수입니다.
Django에서 제공하는 Built-in Validator 공식 문서 및 참고
Django Validators | Django documentation
django.core.validators
를 불러와서 원하는 필드에validators
옵션을 추가할 수 있습니다.
- 실행 후 정상적으로 에러 메시지를 확인할 수 있습니다.
Writing Custom Validator
Django에서 제공하는 built-in validator 대신 직접 validator 파일을 만들어 조건을 설정하고, 에러를 발생시킬 수 있습니다.
위의 예시에서 보면 content
칸에 어떤 텍스트든 입력할 수 있게 되어 있습니다.
저는 여기서 숫자만 입력하는 것을 막고 싶었습니다. (제가 가끔 귀찮을 때 숫자만 대충 입력할 수 있기 때문에) 직접 validator를 만들어 보고 싶기도 했고, 이 기능이 감성 분석(자연어 처리)에 활용될 수 있을 것 같았습니다.
따라서 validators
파일을 생성하고 django.core.exceptions
의 ValidationError
를 불러왔습니다.
처음 코딩을 배우며 알고리즘 문제를 풀 때 사용했던 isdigit()
함수를 활용했습니다. 그리고 에러 메시지를 지정했습니다.
- 이 함수를 import하여 아까 작성한
validators
옵션에 추가했습니다.
- 정상적으로 에러가 발생했습니다.
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_APPS
에django_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
psycopg2
와psycopg2-binary
를 설치하려고 시도했지만 해결되지 않았습니다.
결국 GitHub에서 해결 방법을 찾았습니다
brew install postgresql
명령어를 사용하여 PostgreSQL을 설치한 후,pip install psycopg2
로 해결되었습니다.정상적으로 데이터가 생성되었습니다.