Django 웹 프레임워크
아래 내용은 파이썬 웹프로그래밍(한빛출판사) 책의 내용을 정리한 것입니다.
일반적인 특징
- MTV 패턴 기반
- Template: 데이터를 사용자에게 보여주는 컴포넌트 (MVC에서의 View)
- View: 데이터를 가져와 변형하는 컴포넌트 (MVC에서의 Controller)
- 객체 관계 매핑
- ORM 기능 제공
- 자동으로 구성되는 관리자 화면
- 데이터베이스 관리를 할 수 있는 관리자 화면을 자동을 만들어준다.
- 우아한 URL 설계
- 자체 템플릿 시스템
- 확장이 가능하고 디자인이 쉬운 템플릿 시스템 제공
- 화면 디자인과 로직에 대한 코딩을 분리하여 개발 가능
- 캐시 시스템
- 캐시용 페이지를 메모리, DB, 파일 시스템에 저장 가능
- 캐시 단위로는 페이지, 사이트 전체, 특정 뷰의 결과, 템플릿 일부 등으로 지정 가능
- 다국어 지원
- 텍스트의 번역, 날짜/시간/숫자 포맷, 타임존의 지정등고 ㅏ같은 다국어 환경 제공
- 풍부한 개발 환경
- 테스트 용 웹 서버 포함
- 디버깅 모드 제공
- 소스 변경사항 자동 반영
- *.py 파일의 변경사항을 자동으로 반영
Django 설치
$ pip3 install django
$ python3
>>> import django
>>> print(django.get_version())
1.8.4
Django 에서의 개발
MTV 패턴
MVC 패턴과 용어만 조금 다르니.. 자세한 설명은 패스~
Model
모델은 사용될 데이터에 대한 정의를 담고 있는 클래스이다.
모델 클래스는 models.py 파일에 정의한다.
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
Person 클래스는 내부적으로 다음과 같은 SQL문으로 테이블을 생성한다.
CREATE TABLE myapp_person {
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
};
장고에서 테이블 및 컬럼을 자동으로 생성하기 위한 아래와 같은 몇가지 규칙이 존재한다.
- 테이블명은 애플리케이션과 테이블 클래스명을 '_'로 연결, 모두 소문자로 표시한다.
- Primary Key는 Person 클래스에서 정의하지 않아도 자동으로 부여한다.
Template
장고는 자체 템플릿 시스템을 가지고 있으며, 이는 쉬운 문법을 제공하여 디자이너와 개발자 간에 효율적인 협업을 가능케한다. 템플릿 파일은 *.html 확장자를 가지며, settings.py 파일에 정의되어 있는 TEMPLATE_DIRS 및 INSTALLED_APPS 에 지정된 위치에서 템플릿 파일을 검색한다.
INSTALLED_APPS = {
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls'
)
TEMPLATE_DIRS = ['/hom/shkim/pyBook/ch3/templates']
URLconf - URL 설계
URL 정의를 위해서는 urls.py 파일에 URL과 처리 함수를 매핑하는 파이썬 코드를 작성한다. 이러한 URL/뷰 매핑을 URLconf 라고 한다.
from django.conf.urls immport patterns, 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.article_detail),
)
장고에서 URL 을 분석하는 순서는 다음과 같다.
- setting.py 파일의 ROOT_URLCONF 항목을 읽어 URLconf(urls.py)의 위치를 알아낸다.
- URLconf 모듈을 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사한다.
- 순서대로 URL 리스트의 내용을 검사하면서 매치가 되면 검사를 종료한다.
- 매치가 된 URL 의 뷰를 호출하며, 이때 HttpRequest 객체와 URL 매칭시 추출된 단어들을 뷰에 넘겨준다.
- 매칭에 실패하면 에러를 처리하는 뷰를 호출한다.
View - 로직 설계
장고에서의 뷰는 함수 또는 클래스의 메소드롤 작성되며, 웹 요청을 받고 응답을 반환한다. 뷰는 보통 views.py 파일에 작성하지만, 다른 파일에 작성해도 무방하다. 다만, 파이썬 경로에 있는 파일이어야 찾을 수가 있다.
from django.http import HttpResponse
import datetime
def currrent_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
에러를 반환하고 싶다면 HttpResponseNotFount
와 같은 에러 응답 객체를 반환하면 된다. 에러 응답 클래스는 모두 HttpResponse
클래스의 하위 클래스로 정의되어 있다.
Django 프로젝트 시작하기
Django 프로젝트 생성
$ cd /home/dev/pyBook
$ django-admin.py startproject mysite
django-admin.py 파일의 위치는 운영체제와 파이썬 버전에 따라 조금씩 다른 것 같다. 내 환경인 OSX10.10.5, python3 의 경우에는 다음과 같았다.
/Library/Frameworks/Python.framework/Versions/3.4/bin
애플리케이션 생성
$ python3 manage.py startapp polls
애플리케이션을 정상적으로 생성하면 아래 그림과 같이 관련 디렉토리가 생긴다.
데이터베이스 변경사항 반영
데이터베이스에 변경사항이 있을때 이를 반영해주는 명령이다.
$ cd /home/dev/pyBook/ch3
$ python3 manage.py migrate
장고는 기본적으로 개발시 반드시 사용자와 사용자의 그룹 테이블이 필요하다고 가정하기에, 별도 테이블을 만들지 않았더라도 사용자 및 사용자 그룹 테이블을 만들어주기 위해 프로젝트 개발 시작 시점에 해당 명령을 실행한다.
그림과 같이 db.sqlite3 파일이 생성된 것을 확인할 수 있다. 그리고 다음과 같은 명령을 실행하면 로컬에서 간단히 서버를 실행할 수 있고, 웹으로 확인 가능하다.
$ python3 manage.py runserver 8000