0%

Django Application 개발 방식 : MTV 패턴(MVT 패턴) 등

Django Application 개발 방식

MTV 패턴

  • Django 웹 개발시 대표적으로 많이 사용되는 패턴으로써, 일반적으로 웹 프로그램 개발시 언급되는 MVC 패턴과 상당히 비슷한 패턴입니다.

구성 요소

Model

  • 데이터베이스에 저장되는 데이터
  • 사용될 데이터에 대한 정의를 담고 있는 Django의 Class
  • ORM 기법을 사용하여 Application 에서 사용할 데이터베이스를 Class로 Mapping
  • Model 클래스 하나는 테이블 하나와 매핑되고, 모델 클래스 속성은 테이블의 컬럼에 매핑됩니다.
  • 이 때, 테이블명은 밑줄과 소문자로 표시됩니다. 다른 이름으로 지정할 수 있습니다.
  • Primary Key는 Person 클래스에서 정의하지 않아도 Django 에서 자동으로 부여합니다. 또는 직접 지정할 수 있습니다.

Template

  • 사용자에게 보여지는 UI 부분 (또는, HTML 파일 등)

View

  • 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리한 결과를 Template에 전달하는 역할

프로그래밍 순서

  1. 프로젝트 뼈대 만들기 : 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성
  2. Model 코딩하기 : 테이블 관련 사항을 개발 (models.py, admin.py 파일)
  3. URLconf 코딩하기 : URL 및 View 매핑 관계를 정의 (urls.py 파일)
  4. Template 코딩하기 : 화면 UI 개발 (templates/ 디렉토리 하위의 *.html 파일들)
  5. View 코딩하기 : 애플리케이션 로직 개발 (views.py 파일)

프로젝트 생성

1
django-admin startproject MyProject

애플리케이션 생성

1
MyProject> python manage.py startapp MyApp1

처리 과정

  1. 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석합니다.
  2. URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 View를 결정합니다.
  3. View는 자신의 로직을 실행하면서, 만일 데이터베이스 처리가 필
  4. View는 자신의 로직 처리가 끝나면, Template을 사용하여 클라이언트에 전송할 HTML 파일을 생성합니다.
  5. View는 최종 결과로, HTML 파일을 클라이언트에게 보내 응답합니다.

URLconf

  • URL 정의; 직관적이고 이해하기 쉬운 URL 설계가 가능합니다.
  • 이 방식은 Elegant(우아한) URL 이라고 합니다.
1
2
3
4
5
6
7
from django.urls import path
from . import views

urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail)
]

Django에서 URL를 분석하는 순서

  1. settings.py 파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf (urls.py) 위치를 알아냅니다.
  2. URLconf 를 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사합니다.
  3. urlpatterns 에 정의되어 있는 리스트를 확인하고, URL 패턴이 일치되면 검사를 종료합니다.
  4. 매치된 URL 를 통해 View 함수나 메서드를 호출합니다. 호출시 HttpRequest 객체와, 그리고 매칭할 때 추출된 단어들을 View에 인자로 넘겨줍니다.
  5. URL 리스트 끝까지 검사했는데도 매칭에 실패하면 에러를 처리하는 View를 호출합니다. (get_object_or_404() 등..)

Django Path Converter

  • str : / (슬래시)를 제외한 모든 문자열과 매치됩니다. 타입 미지정시, 디폴트.
  • int : 0 또는 양의 정수와 매치. 이 때 Python의 int 타입과 동일.
  • slug : ASCII, 숫자, 하이픈, 밑줄로 구성되어 있는 ‘slug’ 형식의 문자열
  • uuid : Python 의 UUID 타입과 동일.
  • path : / (슬래시)를 포함한 모든 문자열과 매치되며, URL 패턴의 전체를 추출하고자할 때 많이 사용.

정규표현식 (Regular Expression) 을 사용한 Django URL Pattern

1
2
3
4
5
6
7
from django.urls import path, re_path
from . import views

urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\\-]+)/$', views.article_detail)
]

참고) 파이썬 웹 프로그래밍(한빛미디어)