-
[Django] MTV 패턴과 간단한 예제 실습(model 제외)Python & Django 2021. 5. 21. 15:33
1. MTV 패턴
루비온레일즈를 시작할 때, MVC 패턴을 공부했었는데요, 장고에서는 이와 유사한 MTV 패턴을 활용합니다.
장고의 MTV 패턴은 Model, Template, View 를 의미하며, Model은 Database 에 접근을, Template은 사용자에게 보여지는 페이지를, View는 데이터의 처리를 담당합니다.
사용자가 서버에 요청을 보내면, 서버의 view는 model에서 요청에 필요한 데이터를 받고, view는 받은 데이터를 처리하여 template으로 전달합니다. 그러면 template은 받은 정보를 사용자에게 보여주는 것입니다.
즉, MVC 패턴의 Model, View, Controller 가 각각 MTV 에서 Model, Template, View와 대응된다고 할 수 있습니다.
루비온레일즈의 MVC 패턴에 대해 설명했던 포스팅을 첨부하니 참고하시기 바랍니다.
https://igoo-it.tistory.com/5?category=983641
[루비온레일즈] MVC 패턴(뷰, 컨트롤러, 라우트)
이전 포스팅에서는 Rails를 이용해 서버를 실행시켜보았습니다. 2021/03/05 - [개발/Ruby] - [루비온레일즈] 02. Rails로 웹 서비스 프로젝트 시작하기 [루비온레일즈] 02. Rails로 웹 서비스 프로젝트 시작
igoo-it.tistory.com
2. 예제
이번 실습은 아래와 같이 이름을 입력하면 인사를 해주는 사이트입니다.
가상환경 실행
우선, vs code 를 실행하고 가상환경을 만들어줍니다.
$ python3 -m venv myvenv
그리고 만들어진 가상환경을 실행합니다.
$ source myvenv/bin/activate
터미널 창을 보면 아래 이미지와 같이 명령어 입력하는 곳 맨 앞에 괄호로 (myvenv) 라는 가상환경이 실행된 것을 확인할 수 있습니다.
장고 다운로드
$ pip install django
터미널에 위 명령어를 입력해 장고를 설치합니다.
새 장고 프로젝트 만들기
아래 명령어로 장고 프로젝트를 만들면 vs code 화면 왼쪽 상단에 새 프로젝트가 생성된 것을 확인할 수 있습니다.
$ django-admin startproject 프로젝트명
앱 만들기
장고에서 앱(App)이란 프로젝트를 이루는 작은 단위입니다.
한 웹사이트는 검색, 이메일, 쇼핑, 카페, 뉴스 등등 여러 페이지와 기능으로 구성되어 있습니다. 이때, 장고의 앱을 이런 서비스나 기능에 따라 분류를 한 것이라 생각하면 이해가 쉽습니다.
앱을 생성할 때는 manage.py 파일을 활용합니다. 따라서, 앱을 만들 때는 manage.py가 있는 폴더에서 아래 명령어를 실행합니다.
(폴더를 이동할 경우 cd 를 사용합니다.)
python manage.py startapp 앱이름
왼쪽 네비게이션을 보면 tistory 프로젝트 안에 firstapp 이라는 앱이 생성된 것을 확인할 수 있습니다.
앱 등록하기
새 앱을 만들면, 프로젝트 폴더의 settings.py 에 새로 생성한 앱을 추가하여 해당 프로젝트에 속한 앱이라는 것을 알려줘야 합니다.
INSTALLED_APPS = [ ... 'fistapp.apps.FirstappConfig', ]
규칙: '앱이름.apps.앱이름(첫글자 대문자)Config'
3. 첫번째 페이지(이름 입력받는 페이지) 만들기
Template 만들기
우선 사용자의 이름을 입력받을 수 있는 template을 하나 만들어야 합니다.
프로젝트폴더/앱폴더 하위에 templates 폴더를 생성하고 그 안에 html 파일을 만들어줍니다.
저는 welcome.html 이라고 생성하여 아래 코드를 채워넣었습니다.
<div style="text-align: center;"> <h1>사용자의 이름을 입력해주세요.</h1> <br> <form action="hello"> <label for="nameInput">이름 : </label> <input type="text" id="nameInput" name="name"> <input type="submit" value="제출"> </form> </div>
이 코드는 폼을 생성해 조금 이따가 만들어줄 view의 hello 액션으로 연결하고 이름을 입력받아 넘기라는 의미입니다.
View 만들기
template 을 만들었으니, 이제 폼으로 입력받은 데이터를 처리할 view를 만듭니다.
view는 앱 폴더의 view.py 에서 만듭니다.
from django.shortcuts import render # Create your views here. def welcome(request): return render(request, 'welcome.html')
위 코드는 welcome 이라는 함수를 생성하는 것인데, welcome 함수를 사용하면 render를 통해 welcome.html 문서를 불러오라는 의미입니다.
다음은 보통 데이터베이스에 접근하는 model을 만들어야 하지만 이 예제에서는 DB가 필요없기 때문에 사이트를 호출할때 사용하는 url로 넘어가겠습니다.
Url 과 view 함수 연결하기
페이지를 보여주기 위해서는 url을 만들어줘야 사용자가 그 페이지로 찾아갈 수 있습니다.
장고에서는 프로젝트 폴더 하위에 urls.py 파일에서 url과 view 를 연결해줍니다.
... from django.contrib import admin from django.urls import path from firstapp import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.welcome, name="welcome"), ]
url 을 연결하는 방법은 우선 from 앱이름 import views 로 해당 앱의 뷰를 불러올 수 있게 하고, urlpatterns 안에 path를 지정합니다. path 는 'url주소', views.뷰이름 으로 작성합니다.
위 예제에서 url주소에 아무것도 넣지 않으면 서버를 열었을 때 첫 페이지가 welcome 이 됩니다. 마지막으로 세번째 넣은 name 인자를 지정하면 다른 html 파일에서 url 주소 대신 welcome 이라 넣어서 사용할 수 있게 됩니다.
서버 실행하기
서버를 실행하는 명령어는 다음과 같습니다.
$ python3 manage.py runserver
다음과 같이 서버가 실행되었고, 서버를 끄는 단축키는 control+c 입니다.
4. 두번째 페이지(인사하는 페이지) 만들기
이제 폼에서 사용자의 이름을 입력받아서 인사를 하는 페이지를 만들어야 합니다.
view 작성하기
우선, welcome.html 에서 입력받은 데이터를 처리할 view 를 만들어줍니다.
view.py 에 가서 아래 코드를 추가합니다.
def hello(request): userName = request.GET["name"] return render(request, "hello.html", {'userName' : userName})
이 코드는 hello 라는 함수를 만드는데 이 함수는 userName 이라는 변수 안에 GET 함수로 welcome.html 에서 name 으로 받은 사용자의 이름 데이터를 가져와서 render 함수로 "hello.html"을 불러오라는 뜻입니다.
이때, 세번째 인자에 딕셔너리 자료형으로 userName 이라는 키와 userName 이라는 밸류를 넘겨주면 이 데이터가 hello.html 로 넘어갑니다.
template 만들기
이제 사용자의 이름을 받아 인사하는 페이지를 만들기 위해 templates 폴더 아래에 hello.html 파일을 생성해주고 아래 코드를 작성합니다.
<div style="text-align: center;"> <h1>반갑습니다! {{userName}}님</h1> </div>
html 파일에서 view에서 넘겨온 데이터를 보여주기 위해서는 {{}} 를 사용해 안에 키 값, 즉 userName 을 넣어주면 됩니다.
url 연결하기
다음으로 view의 hello 을 url 로 연결해야 합니다. url.py 에 가서 위에서 welcome 을 연결한 것과 같이 hello 를 연결해줍니다.
urlpatterns = [ path('admin/', admin.site.urls), path('', views.welcome, name="welcome"), path('hello/', views.hello, name="hello"), ]
이제 서버를 실행해보겠습니다.
폼에 이구를 입력했더니 반갑습니다! 이구님 이라는 메세지가 잘 출력되는 것을 확인할 수 있습니다!
이렇게 장고 MTV 패턴을 배워 첫 실습을 진행해봤습니다. 복습해보면 가상환경을 만들고 실행 후 장고 프로젝트를 만들고, App을 만들었습니다. 그리고 template-view 를 제작하고 url 을 연결했습니다!
이전에 공부했던 루비온레일즈의 MVC와 유사하게 동작해 쉽게 이해할 수 있었는데요, 계속해서 파이썬, 장고 공부를 이어가보겠습니다😊
'Python & Django' 카테고리의 다른 글
[Django] CURD 로 블로그 구현하기(READ) (0) 2021.06.01 [Django] 모델 생성, 어드민 페이지 실습 (0) 2021.06.01 [Python 기초] 자료형 (0) 2021.05.12 [Python 기초] 입력과 출력 (0) 2021.05.09 [Python 기초] 파이썬 시작하기 (0) 2021.05.09