Django : python으로 웹서비스 개발하기(3) - Django 앱 생성하기

harry jang·2023년 7월 4일
0

Django

목록 보기
3/12
post-thumbnail

앱 생성하기

지난 번 포스팅에서 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"라는 문구가 노출되게 됩니다.

profile
software engineer

0개의 댓글