목차
- MVC, MFV
- Django 개념
- Project와 App
- view.py
- Django Form
- Static file
- settings.py
- manage.py
1. MVC, MTV
-
MVC (= MTV in Django) = Model View Control (= Model Template View in Django)
-
MVC 이전에는 다양한 코드가 한 곳에 들어가 있었기 때문에, 하나를 잘못 건드리면 시스템 전체가 문제가 됐었음
-> 이후 코드를
Model
View
Control
로 분류.
Django는 Model, Template, View라는 MTV 패턴을 따르고 있는데, MTV은 MVC (Model View Controller)와 유사한 점이 많다. Django는 Controller의 역활을 Django Framework 자체에서 한다고 보고 있으며, 따라서 MVC와 약간 다른 미묘한 차이를 MTV로 설명하고 있다.
MTV에서의 Model은 데이타를 표현하는데 사용되며, 하나의 모델 클래스는 DB에서 하나의 테이블로 표현된다. MTV의 View는 HTTP Request를 받아 그 결과인 HTTP Response를 리턴하는 컴포넌트로서, Model로부터 데이타를 읽거나 저장할 수 있으며, Template을 호출하여 데이타를 UI 상에 표현하도록 할 수 있다. MTV의 Template은 Presentation Logic 만을 갖는데 HTML을 생성하는 것을 목적으로 하는 컴포넌트이다.
2. Django 개념
- User’s Browser 의 다양한 액션 (ex. url 클릭, 데이터 입력 등 )들을 Url Dispatcher을 거쳐서 적합한 View로 연결이 됨.
- 초록색 부분이 우리가 실제로 다루게 되는 python 파일들이다.
- wigs.py : 웹 서버와 장고를 적절히 결합시켜 줌
- views.py : DB에서 받아온 데이터를 적절히 가공시키는 것. 대부분의 코드를 여기서 작성하게 됨
- models.py : 변수를 다루게 되면 manager가 DB sql 과 연결시켜줌.
- example.html : script 파일
- forms.py : 게시물 작성 폼 등
3. Project와 App
- 하나의 프로젝트 내에 다양한 앱이 존재.
- 프로젝트는 장고 Admin을 통해 쉽게 생성 가능함 (Admin : 장고 관리자 페이지)
- App 생성
django project 생성
django-admin startproject myweb
- myweb이라는 project 생성
django server 실행
./manage.py runserver 8080
- 8080 port 서버 실행
django App 생성
./manage.py startapp home
- home이라는 app생성
helloworld 를 띄우기 위해 home/views.py 수정
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, World!")
- settings.py : INSTALLED_APPS 리스트에 Django App명 (home) 추가
- urls.py : urlpatterns 리스트에 사용할 URL 패턴 추가.
4. view.py
Django에서의 뷰(View)는 다른 일반 MVC Framework에서 말하는 Controller와 비슷한 역활을 한다 (정확히 같은 개념은 아님. 아래 MTV 패턴 참조). 즉, View는 필요한 데이타를 모델 (혹은 외부)에서 가져와서 적절히 가공하여 웹 페이지 결과를 만들도록 컨트롤하는 역활을 한다.
View들은 Django App 안의 views.py 라는 파일에 정의하게 되는데, 각 함수가 하나의 View를 정의한다. 각 View는 HTTP Request를 입력 파라미터로 받아들이고, HTTP Response를 리턴한다.
from django.http import HttpResponse
def index(request):
return HttpResponse("<h1>Hello, World!</h1>")
위의 예제는 하나의 View 함수를 표현한 것인데, 이 함수는 입력으로 항상 request 를 받아들이고, response 를 리턴하게 된다. View는 (1) 웹페이지 내용을 갖는 HttpResponse 객체를 리턴하거나 (2) Http404 같은 Exception을 리턴한다. 여기서는 간단한 HTML Text를 포함한 HttpResponse() 객체를 리턴하고 있다. 일반적으로 Django 에서는 좀 더 복잡한 HTML을 처리하기 위해 뷰 템플릿(Template)을 사용한다.
또 다른 예제로서 아래는 Http404 Exception을 일으키는 것을 예시한 것으로 return이 아닌 raise를 사용함에 주목하자. 비슷한 효과를 내기 위해 HttpResponseNotFound를 사용할 수 있지만, Http404이 좀 더 편리한 기능이다.
from django.http import Http404, HttpResponseNotFound
def error(request):
#return HttpResponseNotFound('<h1>not found</h1>')
raise Http404("Not Found")
5. Django Form
Django 프레임워크는 Model 클래스로부터 폼(Form)을 자동으로 생성하는 기능을 제공하고 있다. 모델 클래스로부터 폼 클래스를 만들기 위해서는,
- django.forms.ModelForm 클래스으로부터 파생된 사용자 폼 클래스를 정의한다.
- 사용자 폼 클래스 안에 Meta 클래스 (Inner 클래스)를 정의하고 Meta 클래스 안 model 속성(attribute)에 해당 모델 클래스를 지정한다. 즉, 어떤 모델을 기반으로 폼을 작성할 것인지를 Meta.model 에 지정하는 것이다.
6. Static file
웹사이트는 일반적으로 자바스크립트, CSS, 이미지 등의 파일들을 사용하는데, 이러한 파일들을 Django 에서는 Static 파일이라 부른다. 이러한 Static 파일들을 체계적으로 관리하기 위하여 일반적으로 Django 프로젝트 홈 디렉토리 (settings.py에서의 BASE_DIR) 밑에 “static” 이라는 서브 폴더를 만들어 그곳에 static 파일들을 넣는다.
7. Setting.py
-
전체적인 프로젝트와 관련된 다양한 설정
debug
: 에러들을 확인 가능. default=True. (실제 배포시엔 False)installed_apps
: pip로 설치한 app들. 다양하게 설치 가능.midedleware_classes
: request와 reponse 사이에서 다양한 기능들을 레이어함.templates
: 템플릿 관련 설정과 실제뷰 (html과 다양한 변수들)databases
: DB에 관한 설정static_url
: html과 관련된 정적 파일들을 다루는 파일
8. Manage.py
-
프로젝트를 관리하기 위한 다양한 명령어 제공
startapp
: 앱 생성runserver
: 서버실행createsuperuser
: 관리자 생성makemigrations app
: app의 모델 변경 사항 체크migrate
: 변경사항 DB에 반영shell
: 쉘을 통해 데이터 확인collect static - static
: 파일을 한 곳에 모음.
제가 올린 글에서 잘못된 부분이 있으면 제 메일로 연락주세요!
참고자료 : https://yeo0.github.io/pg/2018/09/06/Django-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/ ,
http://pythonstudy.xyz/
이승수의 저작물인 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.