당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part1 - 4편

첫번째 뷰 작성하기


지난 시간에 polls 앱을 생성하였고, 이번 포스팅에는 첫번째 view 를 작성해 봅니다


디렉토리 구조는 아래와 같고, polls/view.py 파일을 작성을 진행해봅니다.


1
2
3
4
5
6
7
8
9
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py



Django의 MTV 모델



view 를 작성하기 전에, django 의 MTV 모델에 대해서 알아야 하는데. 간단하게 짚고 넘어가자면..


Models, Templates, View 의 약자로


  • Models - 데이터베이스의 구조 설계
  • Templates: 화면에 보이는 포맷
  • Views: 전달된 요청을 처리하고 반환하는 로직

처음 접하면 생소하기도 하고, 헷갈리기도 해서. 몇가지 그림들을 가져와 봤습니다.




사용자가 URL 을 통해서 View 에 요청을 하면

View 는 요청을 처리하고, 사용자에게 결과물을 반환합니다

View 는 Model 을 통해서 데이터베이스에서 데이터를 가져올수도 있고, 저장할수도 있습니다

View 는 Templates 에 결과를 그려주기도 합니다.

처리 결과를 Template 에 그려주고, 그 Template 을 사용자에게 다시 반환하는것도 View 가 할 역할입니다.






따라서, view 를 작성하려면,

요청을 받을 URL 도 있어야 하고

사용할 Model 도 있어야 하고

화면을 출력할 Template 도 있어야 합니다


View 에는 요청을 받아서, 요청을 처리하고 값을 반환해주는 함수들이 필요합니다.



MTV 순서



처음에 django 공부할때, 어떤거 부터 작성해야 하는지에 대해서 많이 헷갈렸었는데. 튜토리얼에서는 View 부터 작성하고 시작합니다.


어떤분들은, models 부터 시작하고, 어떤분들은 templates 부터 시작합니다.

어디서부터 시작하는지는 개인 취향에 맡겨야 할것 같습니다. 결과물만 좋다면,, 순서는 뭐 중요하지 않지요.


공식문서에 나와있는 순서들도 100% 맞는 순서가 아니지만, 참고 합니다.


공식문서 튜토리얼에서 진행하는 순서는 View 부터 진행합니다


View 작성하기



튜토리얼에서, 첫번쨰 View 를 작성 진행하는 순서는 아래와 같습니다


1) polls/views.py에 view 작성

2) 요청을 전달할 polls/urls.py 생성 및 작성 (이 url은 작성된 view 를 요청합니다)

3) 프로젝트 url 과 polls/urls.py 를 연결



url 을 통해서 사용자가 요청을 보내면,

view 는 요청을 처리하고. 사용자에게 값을 반환합니다.



자 그럼, 첫번째 뷰를 작성해 봅니다. polls/views.py를 열고, 아래 파이썬 코드를 작성합니다.


1
2
3
4
from django.http import HttpResponse 

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")



이것이 django 에서 제일 간단한 view 입니다. 이 view 를 호출하기 위해서는 url 이 필요하겠죠?


따라서 url을 생성해 줍니다



polls/urls.py 생성하기



polls/ 폴더에 urls.py 를 생성해 줍니다.

아래 디렉토리 구조는 urls.py 를 polls 폴더에 생성한 후의 구조 입니다.


1
2
3
4
5
6
7
8
9
10
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py



polls/urls.py 에 아래 코드를 적어줍니다.



1
2
3
4
5
6
7
8
9
# polls/urls.py 

from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),
]


루트 URLConf 설정



루트 URLConf 에서, polls/urls.py 를 연결해 줍니다. 여기서 얘기하는 루트 URLConf 는 mysite/urls.py 입니다.



mysite/urls.py 를 열고, urlpatterns 에

polls/urls.py 가 포함되게 해줍니다



1
2
3
4
5
6
7
8
9
# mysite/urls.py 

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]


호출 순서



루트 URLConf 설정을 해주고, 잠시 작동 순서를 생각해봅니다.



브라우저에서 polls/ 로 접속해보면, 아래와 같은 동작 순서가 그려집니다.


  1. 브라우저에서 polls/ 로 접속
  2. polls/ 에서 include() 함수를 통해서 polls/urls.py 로 연결
  3. polls/urls.py''로 접속했을때, 위에서 작성한 polls/views.py 에 있는 index 함수를 호출 (즉, 127.0.0.0:8000/polls/ 로 접속했을때 index함수가 호출됨)
  4. polls/views.py 에 있는 index 함수는 요청을 처리후 HttpResponse 로 값을 반환
  5. 브라우저에 요청이 처리되고 반환값이 표시

include()함수



튜토리얼에서는 include() 함수에 대해서 설명을 하고 있는데. include() 함수는 루트에 존재하는 urls.py 가 다른 url 설정들을 참조할수 있게 해줍니다. 언제든 Django가 include()를 만나면, 참조하는 다른 url 설정으로 남은 문자열들을 전달합니다.


튜토리얼에서는 include() 함수에 대해서 간단하게 설명하고 있는데.
Django 초심자라면, 이 시점에서 이 설명을 들으면 오히려 튜토리얼 진행을 할수 없을만큼 헷갈립니다.


include() 함수는 다름 URL 패턴들을 포함할수 있게 합니다.

다른 url 패턴들을 포함하고 싶을때에는 언제나 include() 함수를 사용합니다

admin.site.urls 는 예외입니다.



서버를 실행해서 확인하기



python manage.py runserver를 실행하고, 브라우저를 엽니다

브라우저 주소창에 127.0.0.1:8000 이 표시되어 있고, page not found(404) 가 표시됩니다




페이지를 찾을수 없는 이유는, 루트에 있는 url 파일을 확인해 보면 알수 있습니다.

mysite/urls.py 파일을 참조하면, 등록되어 있는 urls 는 총 2개로 admin/polls/ 2개 뿐입니다


이 2가지 url 을 제외한 url 을 입력하면, 당연히 django 에서 url을 찾을수 없겟죠? ㅎㅎ



127.0.0.1:8000/polls 혹은

127.0.0.1:8000/admin 으로 접속하면 해당 페이지들을 찾을수 있을겁니다.




127.0.0.1:8000/polls/로 접속해 봅니다. polls/views.py 에 있는 Index 뷰가 정상적으로 화면에 메시지를 출력할것 입니다.





마치며..



공식문서 튜토리얼에 첫번째 뷰 작성하기 부분 마지막에는 path() 함수에 대한 설명이 있는데.
이부분은 아직 깊게 들어갈 필요가 없습니다.
이제까지 내용도 소화하기 힘든데, path() 까지 깊게 짚지 않고, 향후에 실력이 더 쌓이면 깊게 들어가 보겠습니다.