장고 내에서 기본으로 지원되는 모델 필드를 알아보자.
Primary Key : AutoField, BigAutoField
문자열 : CharField, TextField, SlugField
날짜/시간: DateField, TimeField, DateTimeField, DurationField
참/거짓 : BooleanField, NullBooleanField
숫자 : IntegerField, SmallIntegerField, PositiveIntegerField, PositiveSmallIntegerField, BigIntegerField, DecimalField, FloatField
파일 : BinaryField, FileField, ImageField, FilePathField
이메일 : EmailField
URL : URLField
UUID : UUIDField
IP : GenericIPAddressField
Relationship Types : ForeignKey, ManyToManyField, OneToOneField
이밖에도 다양한 커스텀 필드들이 존재한다.
모델 필드들은 DB 필드 타입을 반영한다.
예를들어 Varchar 필드 타입은 CharField, SlugField, URLField 등으로 매핑된다.
파이썬 데이터타입과 데이터베이스 데이터타입도 매핑 된다.
자주 쓰이는 필드 공통 옵션
blank : 장고 단에서 validation 시 empty 허용 여부 (디폴트 : False)
null : null 허용 여부 (디폴트 : False)
db_index : 인덱스 필드 여부 (디폴트 : False)
default : 디폴트 값 지정, 혹은 값을 리턴해줄 함수
unique : 유일성 (디폴트 : False)
choices : select 박스 소스
validators : validators 를 수행할 함수 다수 지정
verbose_name : 필드레이블, 미지정시 필드명이 사용
help_text : 필드 입력 도움말
만약 blank 가 디폴트 상태인 False 라면,
장고 form 을 이용한 유효성 검사에서 아무 값도 없는 필드는 걸리게 된다.
근데 model 에서 blank 옵션이 False 로 되어 있다하더라도,
장고 form 을 쓰지 않으면 유효성 검사를 하지 않는다. -> 이거 유의!
권장 사항
설계한 데이터베이스 구조에 따라, 최대한 필드 타입을 타이트하게 지정해주는 것이 입력값 오류를 막을 수 있다!
(모델 설계가 장고 개발의 절반이라고 해도 될정도,,)
프론트엔드에서 유효성검사는 사용자 편의를 위해서 수행하며,
백엔드에서의 유효성 검사는 필수이다.
직접 유효성 로직을 만들지말고, 이미 잘 구성된 장고의 Form/Model을 가져다 쓰는게 안전하다!
'Archive > Develop' 카테고리의 다른 글
[ Oracle ] count(*) VS count(특정컬럼명) (0) | 2021.11.16 |
---|---|
[ Django ] DateTimeField | auto_now_add VS auto_now (0) | 2021.11.16 |
[ Django ] Django DB 에 관하여 (0) | 2021.11.16 |
[ Django ] 블로그 기능 만들기 | blog app 만들기(기본 CRUD) (0) | 2021.11.16 |
개발 방법론 | SPA(Single Page Application) (0) | 2021.11.15 |