open:파이썬-웹-프로그래밍

파이썬 웹 프로그래밍

장고에서 제공하는 제네릭 뷰는 다음과 같이 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: 날짜가 주어지면 그 날짜에 해당하는 객체를 보여줌

폼 처리 과정을 아래와 같이 3가지 경우로 구분

  • 최초의 GET: 폼은 비어있거나 미리 채워진 데이터를 가짐
  • 유효한 데이터를 가진 POST: 데이터를 처리함. 주로 디라이렉트 처리됨
  • 유효하지 않은 데이터를 가진 POST: 보통은 에러 메시지와 함께 폼이 다시 출력됨

FormView 제네릭 뷰를 사용하면 FormView 클래스에 이미 정의되어 있기 때문에 클래스 내에 get(), post() 메소드 정의도 불필요하게 됩니다.

FormView 유의사항

  • formclass: 사용자에게 보여줄 폼을 정의한 forms.py 파일 내의 클래스명
    - template
    name: 폼을 포함하여 렌더링할 템플릿 파일 이름
  • successurl: MyFormView 처리가 정상적을 완료되었을 때 리다이렉트시킬 URL
    - form
    valid() 함수: 유효한 폼 데이터로 처리할 로직 코딩. 반드시 super() 함수를 호출해야 함

파이썬의 로그 레벨

  • DEBUG:
  • INFO:
  • WARNING:
  • ERROR:
  • CRITICAL: 치명적인 문제점이 발생 시 이에 대한 정보로, 로그 레벨의 최상위 수준

핸들러는 로거에 있는 메시지에 무슨 작업을 할지 결정하는 엔진입니다. 즉, 메시지를 화면이나 파일 또는 네트워크 소켓 등 어디에 기록할 것인지와 같은 로그 동작을 정의합니다.

snippet.python
import logging
# 로거 이름으로 계층화
logger = logging.getLogger('project.interesting.stuff')

로거 객체는 각 로그 레벨별로 로깅 호출 메소드를 가지고 있다.

  • logger.debug()
  • logger.info()
  • logger.warning()
  • logger.error()
  • logger.critical()

이외에 두 가지 로깅 메소드가 추가로 가능

  • logger.log(): 원하는 로그 레벨을 정해서 로그 메시지를 생성
  • logger.exception(): 익셉션 스택 정보를 포함하는 ERROR 레벨의 메세지를 생성

로깅 설정 예시

snippet.python
LOGGING = {
 
}

모델 작업은 다음과 같은 순서대로 진행

snippet.shell
vi settings.py
vi models.py
vi admin.py
python manage.py makemigrations
python manage.py migrate
python manage.py runserver

basebase_booksxxx_detailhtmlhtmlhtml

{% 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 %}

장고의 설계 원칙

  • 약한 결합(Loose coupling)
  • 경량 코드(Less code)
  • 신속 개발(Quick development)
  • 반복 방지(DRY, Don't Repeat Yourself)
  • 암시보다는 명시적으로 표현(Explicit is better than implicit)
  • 일관성(Consistency)
  • 암시보다는 명시적으로 표현(Explicit is better than implicit)
  • 관련 도메인 로직을 모두 포함(Include all relevant domain logic)
  • SQL 효율성(SQL efficiency)
  • 간결하고 강력한 문법(Terse, powerful syntax)
  • 필요 시 쉽게 작성할 수 있는 SQL(Option to drop into raw SQL easily, when needed)
  • 약한 결합(Loose coupling)
  • 제약없는 유연설(Infinite flexibility)
  • 베스트 프랙티스 권장(Encourage best practices)
  • 결정적인 URL(Definitive URLs)
  • 표현과 로직의 분리(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)
  • 간단함(Simplicity)
  • 요청 객체의 사용(Use request objects)
  • 약한 결합(Loose coupling)
  • GET, POST 간 차이(Differentiate between GET and POST)
  • 경량 코드(Less code)
  • 일관성(Consistency)
  • 확장성(Extensibility)

APPENDIX

  • open/파이썬-웹-프로그래밍.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1