Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. # 파이썬 웹 프로그래밍 장고에서 제공하는 제네릭 뷰는 다음과 같이 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 상속 기능 추가 <uml> base.html <|-- base_books.html base_books.html <|-- xxx_detail.html </uml> {% load static %} 템플릿 태그는 static이라는 사용자 정의 태그를 로딩해주고, 그 다음에 {% static %} 사용자 정의 태그를 통해 admin/css/base.css 스타일시트 파일을 찾게 됩니다. base_books.html 템플릿 파일을 아래와 같이 작성 ```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 %} ``` # 장고의 설계 원칙 - https://docs.djangoproject.com/en/1.7/misc/design-philosophies/ - https://docs.djangoproject.com/en/1.11/misc/design-philosophies/ ## 일반 사항 - 약한 결합(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) ## 데이터베이스 API - SQL 효율성(SQL efficiency) - 간결하고 강력한 문법(Terse, powerful syntax) - 필요 시 쉽게 작성할 수 있는 SQL(Option to drop into raw SQL easily, when needed) ## URL 설계 - 약한 결합(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:dev:http_상태_코드]] - [[장고의_설계_원칙]] open/파이썬-웹-프로그래밍.txt Last modified: 2024/10/05 06:15by 127.0.0.1