# 파이썬 웹 프로그래밍
장고에서 제공하는 제네릭 뷰는 다음과 같이 4가지로 분류할 수 있다.
- Base View: 뷰 클래스를 생성하고, 다른 제네릭 뷰의 부모 클래스를 제공하는 기본 제네릭 뷰
- View: 가장 기본이 되는 최상위 제네릭 뷰
- TemplateView: 템플릿이 주어지면 해당 템플릿을 랜더링
- RedirectView: URL이 주어지면 해당 URL로 리다이렉트
- Generic Display View: 객체의 리스트를 보여주거나, 특정 객체의 상세 정보 제공
- DetailView: 객체 하나에 대한 상세한 정보를 보여줌
- ListView: 조건에 맞는 여러 개의 객체를 보여줌
- Generic Edit View: 폼을 통해 객체를 생성, 수정, 삭제하는 기능을 제공
- FormView: 폼이 주어지면 해당 폼을 보여줌
- CreateView: 객체를 생성하는 폼을 보여줌
- UpdateView: 기존 객체를 수정하는 폼을 보여줌
- DeleteView: 기존 객체를 삭제하는 폼을 보여줌
- Generic Date View: 날짜 기반 객체의 년/월/일 페이지로 구분해서 제공
- YearArchiveView: 년도가 주어지면 그 년도에 해당하는 객체를 보여줌
- MonthArchiveView: 월이 주어지면 그 월에 해당하는 객체를 보여줌
- DayArchiveView: 날짜가 주어지면 그 날짜에 해당하는 객체를 보여줌
### 4.5.5 클래스형 뷰에서 폼 처리
폼 처리 과정을 아래와 같이 3가지 경우로 구분
- 최초의 GET: 폼은 비어있거나 미리 채워진 데이터를 가짐
- 유효한 데이터를 가진 POST: 데이터를 처리함. 주로 디라이렉트 처리됨
- 유효하지 않은 데이터를 가진 POST: 보통은 에러 메시지와 함께 폼이 다시 출력됨
FormView 제네릭 뷰를 사용하면 FormView 클래스에 이미 정의되어 있기 때문에 클래스 내에 get(), post() 메소드 정의도 불필요하게 됩니다.
FormView 유의사항
- form_class: 사용자에게 보여줄 폼을 정의한 forms.py 파일 내의 클래스명
- template_name: 폼을 포함하여 렌더링할 템플릿 파일 이름
- success_url: MyFormView 처리가 정상적을 완료되었을 때 리다이렉트시킬 URL
- form_valid() 함수: 유효한 폼 데이터로 처리할 로직 코딩. 반드시 super() 함수를 호출해야 함
## 4.6 로그 남기기
### 4.6.1 로거
파이썬의 로그 레벨
- DEBUG:
- INFO:
- WARNING:
- ERROR:
- CRITICAL: 치명적인 문제점이 발생 시 이에 대한 정보로, 로그 레벨의 최상위 수준
### 4.6.2 핸들러
핸들러는 로거에 있는 메시지에 무슨 작업을 할지 결정하는 엔진입니다. 즉, 메시지를 화면이나 파일 또는 네트워크 소켓 등 어디에 기록할 것인지와 같은 로그 동작을 정의합니다.
### 4.6.5 로거 사용 및 로거 이름 계층화
```python
import logging
# 로거 이름으로 계층화
logger = logging.getLogger('project.interesting.stuff')
```
로거 객체는 각 로그 레벨별로 로깅 호출 메소드를 가지고 있다.
- logger.debug()
- logger.info()
- logger.warning()
- logger.error()
- logger.critical()
이외에 두 가지 로깅 메소드가 추가로 가능
- logger.log(): 원하는 로그 레벨을 정해서 로그 메시지를 생성
- logger.exception(): 익셉션 스택 정보를 포함하는 ERROR 레벨의 메세지를 생성
로깅 설정 예시
```python
LOGGING = {
}
```
### 5.1.3 애플리케이션 - Model 코딩하기
모델 작업은 다음과 같은 순서대로 진행
```shell
vi settings.py
vi models.py
vi admin.py
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
```
### 5.1.5 애플리케이션 - Template 코딩하기
### 5.1.6 애플리케이션 - Template 상속 기능 추가