Django Application 개발 방식
MTV 패턴
- Django 웹 개발시 대표적으로 많이 사용되는 패턴으로써, 일반적으로 웹 프로그램 개발시 언급되는 MVC 패턴과 상당히 비슷한 패턴입니다.
구성 요소
Model
- 데이터베이스에 저장되는 데이터
- 사용될 데이터에 대한 정의를 담고 있는 Django의 Class
- ORM 기법을 사용하여 Application 에서 사용할 데이터베이스를 Class로 Mapping
- Model 클래스 하나는 테이블 하나와 매핑되고, 모델 클래스 속성은 테이블의 컬럼에 매핑됩니다.
- 이 때, 테이블명은 밑줄과 소문자로 표시됩니다. 다른 이름으로 지정할 수 있습니다.
- Primary Key는 Person 클래스에서 정의하지 않아도 Django 에서 자동으로 부여합니다. 또는 직접 지정할 수 있습니다.
Template
- 사용자에게 보여지는 UI 부분 (또는, HTML 파일 등)
View
- 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리한 결과를 Template에 전달하는 역할
프로그래밍 순서
- 프로젝트 뼈대 만들기 : 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성
- Model 코딩하기 : 테이블 관련 사항을 개발 (models.py, admin.py 파일)
- URLconf 코딩하기 : URL 및 View 매핑 관계를 정의 (urls.py 파일)
- Template 코딩하기 : 화면 UI 개발 (templates/ 디렉토리 하위의 *.html 파일들)
- View 코딩하기 : 애플리케이션 로직 개발 (views.py 파일)
프로젝트 생성
1 | django-admin startproject MyProject |
애플리케이션 생성
1 | python manage.py startapp MyApp1 |
처리 과정
- 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석합니다.
- URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 View를 결정합니다.
- View는 자신의 로직을 실행하면서, 만일 데이터베이스 처리가 필
- View는 자신의 로직 처리가 끝나면, Template을 사용하여 클라이언트에 전송할 HTML 파일을 생성합니다.
- View는 최종 결과로, HTML 파일을 클라이언트에게 보내 응답합니다.
URLconf
- URL 정의; 직관적이고 이해하기 쉬운 URL 설계가 가능합니다.
- 이 방식은 Elegant(우아한) URL 이라고 합니다.
1 | from django.urls import path |
Django에서 URL를 분석하는 순서
- settings.py 파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf (urls.py) 위치를 알아냅니다.
- URLconf 를 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사합니다.
- urlpatterns 에 정의되어 있는 리스트를 확인하고, URL 패턴이 일치되면 검사를 종료합니다.
- 매치된 URL 를 통해 View 함수나 메서드를 호출합니다. 호출시 HttpRequest 객체와, 그리고 매칭할 때 추출된 단어들을 View에 인자로 넘겨줍니다.
- 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 | from django.urls import path, re_path |
참고) 파이썬 웹 프로그래밍(한빛미디어)