일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- leetcode
- Writing
- 화상영어
- 30분
- 잡생각
- 프로젝트
- Daily Challenge
- 10분
- 리얼 클래스
- 쓰릴오브파이트
- 뭐든
- 미드시청
- 월간
- 영어원서읽기
- 스탭퍼
- 개발자
- 매일
- 영어공부
- 3줄정리
- 사이드
- 운동
- 만화도
- 읽기
- 괜찮음
- Problem Solving
- 링피트
- English
- FIT XR
- realclass
- 파비최
- Today
- Total
파비의 매일매일 공부기록
Two Scoops of Django - #11장 본문
이번장은 장고 폼의 기초에 대한 내용이다.
장고에서 외부에서 입력된 데이터가 어떻게 폼으로 처리되는지를 이해한다면 깔끔하게 정리해서 사용할 수 있는 이점이 생길 것이다.
또한 데이터 처리를 하다 보면 까다로운 경우가 생기는데 이를 극복하는데도 도움이 될 것이다.
기억할만한 가장 중요한 점은 어떤 데이터든 입력 데이터라고 한다면 폼을 이용하여 유효성 검사를 해야 한다는 것이다.
1. 장고 폼을 이용하여 모든 입력 데이터에 대한 유효성 검사하기 : 장고 폼은 파이썬 딕셔너리의 유효성을 검사하는 데 최상의 도구다. 대부분의 경우 POST가 포함된 HTTP 요청을 받아 유효성을 검사하는 데 이용한다. 그 외에도 쓸 수 있긴 하다. 입력되는 데이터에 대해 일일이 유효성 검사 코드를 직접 만들지 않고 장고에서 제공하는 검증된 데이터 테스트 프레임워크를 활용하라.
2. HTML 폼에서 POST 메서드 이용하기 : 데이터를 변경하는 모든 HTML 폼은 POST 메서드를 이용하여 데이터를 전송하도록 구성하라
3. 데이터를 변경하는 HTTP 폼은 언제나 CSRF 보안을 이용해야 함 : 장고에는 CSRF(cross-site request forgery protection)이 내장되어 있다. 이용하기 간편할뿐더러 개발 단계에서 잊어버리고 이용하지 않을 경우 안내 메시지를 보여주기도 한다. CSRF 보안을 사용하지 않으면 치명적인 보안 문제를 만들 수 있으므로 꼭 활용하라고 충고한다. 보통 CSRF를 잠깐 사용하지 않아도 되는 경우는 머신들 사이에서만 이용되는 API 사이트를 제작할 때다. 그 외에는 CSRF를 사용하라.
4. 장고의 폼 인스턴스 속성을 추가하는 방법 이해하기 : 때때로 장고 폼의 clean(), clean_FOO(), save() 메서드에 추가로 폼 인스턴스 속성이 필요할 때가 있는데, 그때는 request.user 객체를 이용하면 된다.
5. 폼이 유효성을 검사하는 방법 알아두기 : 장고 내부에서의 처리 절차를 이해함으로써 코드 품질을 옮길 수 있는 분야가 폼의 유효성 검사다. form.is_valid()가 호출될 때 다음과 같은 순서로 진행한다.
i. 폼이 데이터를 받으면 form.is_valid()는 form.full_clean() 메서드를 호출
ii. form.full_clean()은 폼 필드들과 각각의 필드 유효성을 하나 검사하면서 다음과 같은 과정을 수행한다.
- 필드에 들어오는 데이터에 대해 to_python()을 이용하여 파이썬 형식으로 변환하거나 만약 문제가 생기면 ValidationError를 일으킴
- validator를 포함한 각 필드에 특별한 유효성을 검사. 문제가 있을 시 ValidationError를 일으킴
- 폼에 clean_<field>() 메서드가 있으면 이를 실행
iii. form.full_clean()이 form.clean()을 실행
iv. ModelForm 인스턴스의 경우 form.post_clean() 이다음 작업을 함.
- form_is_valid()가 True/False 상관없이 Model Form의 데이터를 모델 인스턴스로 설정
- 모델의 clean() 메서드를 호출. 참고로 ORM을 통해 모델 인스턴스를 저장하는 때는 모델의 clean() 메서드가 호출되지 않음.
6. Form.add_error()를 이용하여 폼에 이러 추가 : Form.clean을 간소화 가능
7. 기존에 만들어진 위젯이 없는 필드의 경우에도 해당 필드들을 여전히 폼에 이용할 수 있음.
'Study > Python' 카테고리의 다른 글
Two Scoops of Django - #13장 (0) | 2021.06.14 |
---|---|
Two Scoops of Django - #12장 (0) | 2021.06.13 |
Two Scoops of Django - #10장 (0) | 2021.06.11 |
Two Scoops of Django - #9장 (0) | 2021.06.10 |
Two Scoops of Django - #8장 (0) | 2021.06.09 |