Django - 1. Tutorial 따라하기에서
$ django-admin startproject mysite를 통해 프로젝트를 생성했고
$ python manage.py runserver를 통해 개발서버를 시작했습니다.

이제, 설문조사 앱을 만드는 과정의 Tutorial을 따라해보겠습니다.


1. Creating the Polls app

Django에서 작성하는 각 어플리케이션은 Python Package로 구성되어 있으며 이 Python Package는 특정 convention을 따릅니다.

앱을 생성하기 위해 manage.py가 존재하는 디렉토리에서 다음의 명령을 입력해 보겠습니다.

$ python manage.py startapp polls

그러면 polls라는 다음과 같은 directory가 생성됩니다.

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

이 directory가 poll application의 집이라고 생각하면 됩니다.


2. Write your first view

view를 작성해보겠습니다.
polls/views.py파일을 열어 다음과 같은 코드를 넣어주겠습니다.

#polls/views.py
from django.http import HttpResponse


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

view를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용됩니다. polls 디렉토리에서 URLconf를 생성하기 위해 urls.py라는 파일을 생성하겠습니다.

여기서 URLconf란 urls.py파일을 뜻합니다.

view 호출 -> 연결된 URL 필요
-> URLconf 필요 -> urls.py 생성

polls/urls.py의 내용은 다음과 같습니다.

from django.urls import path

from . import views

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

이제 최상위 URLconf(root URLconf)에서 polls.urls 모듈을 바라보게 설정합니다. mysite/mysite/urls.py 에서 django.urls.include를 import 하고, urlpatterns 리스트에 include() 함수를 다음과 같이 추가합니다.

#mysite/mysite/urls.py
from django.contrib import admin
from django.urls import include, path
#django.urls.include를 import

urlpatterns = [
    #urlpatterns 리스트에 include() 함수 추가
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

참고

include() 함수는 다른 URLconf들을 referencing 하도록 도와줍니다. Django가 include()를 만나게 되면, 그 시점까지 URL의 일치하는 부분을 잘라내고, 후속 처리를 위해 남은 문자열 부분을 include 된 URLconf로 전달합니다.

include() 덕분에 URL을 쉽게 연결할 수 있습니다. polls 앱에 URLconf(polls/urls.py)가 있다면 어떤 다른 root 경로에 연결하더라도, 앱은 여전히 잘 동작할 것입니다.


이제 index 뷰가 URLconf에 연결되었습니다. 잘 작동하는지 확인하기 위해 다음 명령을 입력해보겠습니다.

$ python manage.py runserver

http://localhost:8000/polls/로 이동하면 화면이 잘 나오는 것을 확인할 수 있습니다.


이 시점에서 path() 함수에 대해 살펴보겠습니다.

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

path()의 parameter는
필수 인자 route 와 view,
선택 인자 kwargs 와 name
모두 4개의 인수가 전달 되었습니다.

이 인수들이 무엇인지 살펴보겠습니다.

  1. route
    route 는 URL 패턴을 가진 문자열 입니다.
    요청이 처리될 때, Django 는 urlpatterns 의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL 을 리스트의 순서대로 각 패턴을 비교합니다.

패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않습니다. 예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 바라 봅니다. https://www.example.com/myapp/?page=3, 같은 요청에도, URLconf 는 역시 myapp/ 부분만 신경씁니다.

  1. view
    Django 에서 일치하는 패턴을 찾으면 특정한 view 함수를 호출합니다.
    이 view 함수는 HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 '캡처된' 값을 키워드 인수로 합니다.

  2. kwargs
    임의의 키워드 인수들은 목표한 view 에 dictionary로 전달됩니다. 그러나 이 튜토리얼에서는 사용하지 않을겁니다.

  3. name
    URL 에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있습니다. 이 강력한 기능을 이용하여, 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 도와줍니다.