지난 번 포스팅에서 Django 프로젝트 생성을 통해 작업을 시작하기 위한 환경 세팅이 완료되었습니다.
manage.py
파일이 존재하는 디렉토리에서 다음 명령을 통해 해당 프로젝트 내에 작업할 앱을 하나 생성해봅시다.
$ python manage.py startapp test_app
프로젝트 vs 앱
프로젝트 : 특정 웹 사이트에 대한 구성 및 앱의 모음. 한 프로젝트에 여러 개의 앱이 포함될 수 있음.
앱 : 블로그 시스템, 공개 기록 데이터베이스 또는 소규모 의견조사 앱과 같은 작업을 수행하는 웹 애플리케이션. 앱은 여러 프로젝트에 있을 수 있음.
생성된 앱은 아래와 같은 디렉터리 구조를 가집니다.
test_app/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
test_app/views.py
를 수정하여 가장 간단한 형태를 뷰를 한번 작성해 봅시다.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world!")
뷰를 실제로 호출하여 화면에 띄우려면 이와 연결된 URL이 있어야 하는데, 이것은 URLconf를 통해 설정할 수 있습니다.
test_app 디렉토리에서 URLconf를 생성하기 위해 urls.py
라는 파일을 만듭니다. 여기까지 작업하면 앱 디렉토리의 구조는 아래와 같을 것입니다.
test_app/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
urls.py
파일에는 다음과 같은 코드를 입력하여 라우팅할 path를 구성합니다.
from django.urls import path
from . import views
urlpatterns = [
path("world/", views.index, name="index"),
]
path()
path()
함수의 파라미터는 아래와 같이 명시적으로도 작성할 수 있습니다.from django.urls import path from . import views urlpatterns = [ path(route="world/", view=views.index, kwargs=None, name="index"), ]
각 파라미터를 하나하나 뜯어보면 다음과 같습니다.
route : URL 패턴을 가진 문자열입니다.
요청이 처리될 때, Django 는 urlpatterns 의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL 을 각 패턴과 리스트의 순서대로 비교합니다.
view : Django가 일치하는 URL 패턴을 찾으면, 첫번째 인수에는HttpRequest
객체가 담기고 경로로 부터 '캡처된' 값을kwargs
인수로 하여 view에 지정한 함수를 호출합니다.
kwargs : 해당 경로로 들어왔을 때 호출되는 함수에 전달되는 임의의 키워드 인수들. 목표한 view 에dict
형태으로 전달됩니다.
name : 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있도록 지정하는 이름입니다.
다음으로 test_project/url.py
파일을 열고, 아래 코드로 최상위 URLconf에서 test_app.urls
모듈을 바라보게 설정합니다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("hello/", include("test_app.urls")),
path("admin/", admin.site.urls),
]
include()
include()
함수는 다른 URLconf들을 참조할 수 있도록 도와주는 함수 입니다.
Django가include()
함수를 만나게 되면 URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include된 URLconf로 전달합니다.
admin.site.urls를 제외하고 다른 URL 패털을 포함할 때마다 항상include()
를 사용해야 합니다.
이제 index 뷰가 URLconf에 연결되었으니 아래 명령으로 서버를 구동하여 정상적으로 작동하는지 확인해 봅시다.
$ python manage.py runserver
지금까지 잘 따라왔다면 브라우저에서 http://localhost:8000/hello/world를 입력하면, views.py 내의 index()
함수가 호출되어 "hello, world"라는 문구가 노출되게 됩니다.