티스토리 뷰

장고의 어플리케이션 개발 방식

MVT 패턴

일반적인 MVC 패턴과 용어가 조금 다르다. 기존 MVC에서는 M이 MODEL, V가 VIEW, C가 CONTROLLER를 의미하는 반면, 장고의 MVT에서

  • M은 MODEL
  • V는 VIEW(하지만 실질적으로 CONTROLLER 역할)
  • T는 TEMPLATE(실질적으로 VIEW)

을 나타낸다.

각 요소들은 다음과 같이 연결된다.

  1. 웹 클라이언트로부터 Request
  2. 요청을 받으면 URLconf를 이용하여 URL을 분석
  3. 분석 결과를 통해 담당 를 결정(로직)
  4. 뷰는 로직을 실행하며 DB처리가 필요하면 모델을 통해 처리하고 결과를 반환받음
  5. 뷰는 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 보낼 HTML 파일을 생성
  6. 뷰는 최종 결과로 HTML 파일을 클라이언트에 보내 Response함

위에서 진하게 표시된 단어를 하나씩 짚고 가자.

 

URLconf - urls.py

장고에서 프로젝트를 생성하면 urls.py 가 생성되는데, 이 파일 내부에 보면 urlpatterns 라는 리스트가 있고, url과 뷰(처리 함수)를 매핑하여 어떤 url 요청에 대해 어떤 뷰가 처리할지를 정의하고 있다.

from django.urls from import path

from home import views # project 내 home이라는 app으로부터 views 임포트

urlpatterns = [path('/exmaple/', views.example),
              path('/example/<int:level>/<slug:slug>')] 
# /example로 요청이 오면 home이라는 app의 views.py에서 example 함수가 처리

url 패턴 뒤에 <> 꺾쇠는 url 패턴의 일부 문자열을 추출하기 위한 것으로, <type:name> 형식으로 사용된다. 타입이 일치하지 않으면 매치되지 않는다. 이는 Path Converter라고 불리며, str, int, slug, uuid, path의 타입을 가진다. 추가로 타입을 등록하는 것도 가능하다.

정규표현식을 사용하여 더욱 정교한 url을 정의할 수도 있는데, 이 때는 re_path를 사용한다.

urlpatterns=[re_path(r'^example/(?P<year>[0-9]{4})/$', views.example)]
# /example/2019/ 와 같이, year 꺾쇠에는 0에서 9까지의 숫자 4자리만 올 수 있도록 함. ^는 url 시작, $은 url 끝을 나타낸다. P는 최소 0번에서 최대 1번까지 반복한다는 의미이다. 

 

View - views.py

뷰는 웹 요청을 받아 필요하면 db에 접속하는 등 로직 처리를 하고 그 결과를 HTML로 만들어서 클라이언트에 반환한다.

 

Model - models.py

ORM(Object-Relational-Mapping)이란 객체와 관계형 DB(SQL)을 연결해주는 역할을 한다. ORM을 사용하면 직접 SQL 문법을 사용하지 않고도 객체(클래스)를 사용하여 데이터를 처리할 수 있다.

장고의 모델 역시 ORM을 사용하여 테이블을 클래스로 매핑한다.

from django.db from import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
CREATE TABLE myapp_person (
	"id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL 
)

장고에서 myapp이라는 앱에서 models.py 내에 저렇게 Person 클래스를 만들면 내부적으로 SQL 명령이 사용되며 myapp_person이라는 테이블이 생성된다. 테이블명 생성규칙은 앱이름_클래스 이며 모두 소문자로 표시된다. 변경도 가능하다. Primary Key는 정의하지 않아도 장고에서 자동으로 부여하며 직접 변경할 수 있다.

 

Template

장고는 템플릿(.html 파일)을 사용하여 최종 HTML 텍스트 응답을 생성하고 이를 클라이언트에 보여준다.

장고의 템플릿 엔진이 좋은 이유는

  1. 프로그램 로직과 UI를 분리한다. 로직은 views.py가 담당하고 UI는 template이 담당하므로 디자인을 변경할 일이 있으면 template만 건드리면 된다.
  2. html 파일 내에 템플릿 문법을 통해 직접 파이썬 코드를 작성할 수 있다.

장고에서 템플릿 파일을 찾을 때에는 settings.py에서 TEMPLATES, INSTALLED_APP 에서 지정된 앱의 디렉토리를 검색한다. 일단 앱을 생성하면 settings.pyINSTALLED_APP에 추가하는데, 장고는 템플릿을 찾을 때 INSTALLED_APP에 등록된 앱의 templates 디렉토리를 탐색하므로 가장 쉬운 방법으로는 해당 앱(myapp)의 하위 폴더로 templates라는 폴더(myapp/templates)를 만든 다음 거기에서 html 파일을 생성하는 것이다.

 

장고의 MVT 코딩 순서

화면 설계는 뷰(V)와 템플릿 코딩(T)으로 연결되고, 테이블 설계는 모델 코딩(M)에 반영된다.

독립적으로 개발할 수 있는 모델을 먼저 코딩하고, 서로 영향을 미치는 뷰와 템플릿은 모델을 개발한 후 함께 코딩하는 것이 일반적이다. 그러므로

  1. 프로젝트 생성 및 앱 생성, 필요한 디렉토리 생성
  2. 모델 코딩 - models.py, admin.py
  3. URLconf 코딩 (URL/뷰 매핑) - urls.py
  4. 템플릿 코딩 - templates/ 하위의 .html 파일
  5. 뷰 코딩 - views.py

이런 순서로 코딩을 하면 편리하다.

'Python' 카테고리의 다른 글

[Django 입문] 폼클래스 만들기  (1) 2019.11.12
[Django 입문] Model 코딩  (0) 2019.10.31
[Django 입문] 프로젝트 및 앱 생성, 가상환경 설정  (0) 2019.10.31
파이썬 내장 모듈 - 1  (0) 2019.09.24
[파이썬] 힙큐(heapq)  (0) 2019.09.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함