🤖 Django 웹 프레임워크
Django 웹 프레임워크
📌 일반적인 특징
MVC 패턴 기반 MTV | - 장고에서는 View를 Template, Controller를 View라고 부른다. |
객체 관계 매핑(Object-Relational Mapping) | - 데이터베이스 시스템과 데이터 모델을 연결시키는 다리와 같은 역할 |
자동으로 구성되는 관리자 화면 | - 장고는 웹 서버의 콘텐츠, 즉 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공 |
우아한 URL 설계 | - 파이썬 프레임워크의 일반적인 우아한 URL 방식을 채택 |
자체 템플릿 시스템 | - 내부적으로 확장이 가능하고 디자인이 쉬운 강력한 템플릿 시스템을 가지고 있다. - 화면 디자인과 로직에 대한 코딩을 분리하여 독립적으로 개발 진행이 가능하다. |
캐시 시스템 | - 캐시용 페이지를 메모리, 데이터베이스 내부, 파일 시스템 중 아무 곳에나 저장할 수 있다. - 캐시 단위를 페이지에서부터 사이트 전체 또는 특정 뷰의 결과, 템플릿의 일부 영역만을 지정하여 저장해 둘 수도 있다. |
다국어 지원 | - 장고는 동일한 소스코드를 다른 나라에서도 사용할 수 있도록 텍스트의 번역, 날짜/시간/숫자의 포맷, 타임존의 지정 등과 같은 다국어 환경을 제공한다. |
풍부한 개발 환경 | |
소스 변경사항 자동 반영 | - .py 파일의 변경 여부를 감시하고 있다가 변겨잉 되면 실행 파일에 변경 내역을 바로 반영해준다. - 테스트용 웹 서버를 실행 중인 상태에서 소스 파일을 수정할 경우에도 웹 서버를 다시 시작할 필요 없이 자동으로 새로운 파일이 반영된다. |
📌 Django 설치
cmd 창에 다음과 같이 입력
pip install Django |
📌 장고에서의 애플리케이션 개발 방식
- 애플리케이션이란?
웹 사이트를 설계할 때 가장 먼저 해야 할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어 모듈화 하는 것
이 경우, 웹 사이트의 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 한다.
프로젝트: 웹 사이트에 대한 프로그램
애플리케이션: 모듈화된 단위 프로그램
1) MTV 패턴
- MVC 패턴이란?
데이터(model), 사용자 인터페이스(view), 데이터를 처리하는 로직(controller)을 구분해서 설계하는 방식이다.
장고에서는 Model(데이터베이스에 저장되는 데이터), Template(사용자에게 보여지는 부분), View(실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리된 결과를 템플릿에 전달)
-
클라이언트로부터 요청을 받으면 URLconf 모듈을 이용하여 URL 분석
-
URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정
-
뷰는 자신의 로직을 실행하면서, 만일 데이터베이스 처리가 필요하면 모델을 통해 처리하고 그 결과 반환
-
뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 전송할 HTML 파일을 생성
-
뷰는 최종결과로 HTML 파일을 클라이언트에게 보내 응답
2) Model - 데이터베이스 설계
- 모델이란?
사용될 데이터에 대한 정의를 담고 있는 장고의 클래스
하나의 모델 클래스는 하나의 테이블에 매핑되고, 모델 클래스의 속성은 테이블의 컬럼에 매핑된다.
데이터베이스에 대한 액세스를 SQL 없이도 클래스를 다루는 것처럼 할 수 있어서 편리하다.
SQLite3, MySQL 등 데이터 베이스 엔진을 변경하더라도 ORM을 통한 API는 변경할 필요가 없기 때문에 필요에 따라 데이터베이스 엔진을 훨씬 쉽게 변경할 수 있다 .
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
위의 파이썬 코드는 밑의 SQL문과 같다.
CREATE TABLE myapp_person( #테이블명은 애플리케이션명과 테이블 클래스명을 _로 연결
"id" serial NOT NULL PRIMARY KEY, # primary key는 장고에서 자동으로 부여
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
3) Template - 화면 UI 설계
템플릿 파일은 *.html 확장자를 가지며, 장고의 템플릿 문법에 맞게 작성한다.
중요한 것은 템플릿 파일을 적절한 디렉토리에 위치시켜야 한다는 것이다.
장고에서 템플릿 파일을 찾을 때는 TEMPLATE_DIRS 및 INSTALLED_APPS에서 지정된 디렉토리를 검색한다. (setting.py 파일에 정의되어 있다)
4) URLconf - URL 설계
URL을 정의하기 위해서는 urls.py 파일에 URL과 처리함수(뷰)를 매핑하는 파이썬 코드를 작성해주면 된다. 이러한 URL/뷰 매핑을 URLconf라고 한다.
(정규표현식을 알아두면 좋다)
# django 1 문법, 3에서는 코드를 바꿔줘야 한다.
from django.conf.urls import patters, url
from . import views
urlpatterns = patterns('',
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(\d{4})/$', views.year_archive),
url(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', views.artive_detail),
)
5) View 로직 설계
뷰는 웹 요청을 받아서 데이터베이스 접속 등 해당 애플리케이션의 로직에 맞는 처리를 하고, 그 결과 데이터를 HTML로 변환하기 위하여 템플릿 처리를 한 후에, 최종 HTML로 된 응답 데이터를 웹 클라이언트로 반환하는 역할을 한다.
장고에서의 뷰는 함수 또는 클래스의 메소드로 작성되며, 웹 요청을 받고 응답을 반환해준다. 뷰는 보통 views.py 파일에 작성한다.
from django.http import HttpResponse
import datetime
def current_datetime(request): # 뷰함수는 httprequest 객체를 받는다.
now = datetime.datetime.now()
html = "<html><body>it is now %s. </body></html>" % now
return HttpResponse(html) # 필요한 처리를 한 후에 httpresponse객체를 반환한다.
출처: 장고로 배우는 쉽고 빠른 웹개발, 김석훈, 한빛미디어(2015)