파이썬 웹 프로그래밍
장고에서 제공하는 제네릭 뷰는 다음과 같이 4가지로 분류할 수 있다.
Base View: 뷰 클래스를 생성하고, 다른 제네릭 뷰의 부모 클래스를 제공하는 기본 제네릭 뷰
View: 가장 기본이 되는 최상위 제네릭 뷰
TemplateView: 템플릿이 주어지면 해당 템플릿을 랜더링
RedirectView: URL이 주어지면 해당 URL로 리다이렉트
Generic Display View: 객체의 리스트를 보여주거나, 특정 객체의 상세 정보 제공
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 유의사항
4.6 로그 남기기
4.6.1 로거
4.6.2 핸들러
핸들러는 로거에 있는 메시지에 무슨 작업을 할지 결정하는 엔진입니다. 즉, 메시지를 화면이나 파일 또는 네트워크 소켓 등 어디에 기록할 것인지와 같은 로그 동작을 정의합니다.
4.6.5 로거 사용 및 로거 이름 계층화
- snippet.python
import logging
# 로거 이름으로 계층화
logger = logging.getLogger('project.interesting.stuff')
로거 객체는 각 로그 레벨별로 로깅 호출 메소드를 가지고 있다.
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()
이외에 두 가지 로깅 메소드가 추가로 가능
로깅 설정 예시
- snippet.python
LOGGING = {
}
5.1.3 애플리케이션 - Model 코딩하기
모델 작업은 다음과 같은 순서대로 진행
- snippet.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 상속 기능 추가
{% load static %} 템플릿 태그는 static이라는 사용자 정의 태그를 로딩해주고, 그 다음에 {% static %} 사용자 정의 태그를 통해 admin/css/base.css 스타일시트 파일을 찾게 됩니다.
base_books.html 템플릿 파일을 아래와 같이 작성
- snippet.html
{% extends "base.html" %}
<title>{% block title%}Books Application Site{% endblock%}</title>
{% block sidebar%}
{{ block.super }}
<ul>
<li><a href="/books/">Books_Home</a></li>
</ul>
{% endblock %}
장고의 설계 원칙
일반 사항
모델
데이터베이스 API
SQL 효율성(SQL efficiency)
간결하고 강력한 문법(Terse, powerful syntax)
필요 시 쉽게 작성할 수 있는 SQL(Option to drop into raw SQL easily, when needed)
URL 설계
템플릿 시스템
표현과 로직의 분리(Separate logic from presentation)
중복 배제(Discourage redundancy)
HTML과 분리(Be decoupled from
HTML)
템플릿 언어로 XML 금지(XML should not be used for template languages)
디자이너의 능력 가정(Assume designer competence)
여백을 확실하게 처리(Treat whitespace obviously)
프로그래밍 언어를 만들지 말자(Don't invent a programming language)
안정성과 보안(Safety and security)
확장성(Extensibility)
뷰
캐시 시스템
경량 코드(Less code)
일관성(Consistency)
확장성(Extensibility)
APPENDIX
관련 문서