본문 바로가기
  • 실행력이 모든걸 결정한다
Django

[Django] 프로젝트 내에 앱 생성

by 김코더 김주역 2021. 8. 5.
반응형

Web Framework을 맨 처음 학습할 때는, 웹 페이지에 원하는 문구를 띄우는 방법부터 이해하는 것이 좋다고 생각한다.

우리의 목표는 웹 페이지에 "Hello, Django!"를 출력시켜보는 것이다.

 

1. startapp

프로젝트 내에 여러분이 서비스하고자 하는 새 앱을 생성해야 한다.

다음과 같은 명령어로 앱을 생성할 수 있다.

py manage.py startapp [앱 이름]

 

필자는 "users"라는 이름의 앱을 생성했다.

※ admin.py : Admin 사이트에 모델 클래스를 등록해주는 파일

※ apps.py : 애플리케이션의 설정 클래스를 정의해주는 파일

※ manage.py : 장고의 명령어를 처리하는 파일

 

 

 

2. /users/views.py

 

프로젝트가 외부에서 요청 URL를 받으면 라우팅을 걸쳐 해당 요청을 처리하는 목적지로 도착하게 되는데, 여기에서 말하는 목적지가 views.py에 해당한다.

views.py에서는 해당 요청을 처리하는 메소드들을 모아두기로 약속되어있다.

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, Django!")

 

즉, 외부의 요청이 index 메소드에 도달하게 되면 "Hello, Django!" 라는 HTTP 응답을 하게 되는 것이다.

그렇다면 외부에서 어떻게 index 메소드로 들어올 수 있게 안내를 해야 할까?

 

 

 

3. /users/urls.py

라우터(urlpatterns[])가 존재하는 파일의 이름을 urls.py로 짓도록 약속되어있다.

디렉토리마다 urls.py가 존재해야 라우터 관리가 편하기 때문에, /users 디렉토리에 urls.py 파일을 직접 생성한 것이다.

 

Django는 urlpatterns[] 리스트가 라우터 역할을 한다. 다른 라우터로부터 요청이 들어오기도 하고, 다른 라우터로 요청을 넘겨주기도 한다.

또, urlpatterns[]는 path() 메소드에 대한 리스트인데, path() 메소드의 인자는 다음과 같다.

  • route (필수) : URL 패턴
  • view (필수) : URL 패턴이 매칭되면 호출할 뷰 함수
  • kwargs : URL에서 추출된 항목 외에 추가적으로 뷰 함수에 전달할 인자들을 파이썬 사전 타입으로 정의
  • name : URL 패턴 이름으로, 여기서 정해준 이름은 템플릿 파일에서 많이 사용됨

 

그리고, path() 메소드는 3가지 종류로 작성할 수 있다.

"""
Function views (1. 현재 앱의 views를 import)
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views (2. 외부 앱의 views를 import)
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf (3. 라우터 연결)
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

 

</users/urls.py>

from django.urls import path
from . import views

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

즉, 이 urlpatterns[]로 요청이 들어왔을 때 더 이상의 하위 경로가 없다면('') views.py의 index 메소드로 이동하도록 작성하면 된다. 그리고 name 속성은 URL 정보를 나중에 사용하기 위한 URL 이름이다.

 

그렇다면 상위 라우터가 어떻게 이 urlpatterns[]로 들어오도록 해야할까?

 

 

 

4. /urls.py

최상위 라우터(urlpatterns)가 존재하는 urls.py 파일이다. settings.py 파일에 다음과 같이 설정되어있기 때문에 mysite/urls.py를 가장 먼저 분석하는 것이다.

ROOT_URLCONF = 'mysite.urls'

 

mysite/urls.py는 생성할 때부터 주석으로 자세히 가이드가 작성되어있다.

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path

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

 

요청받은 URL주소가 "http://localhost:8000/users/" 일 경우에 users.urls에 있는 urlpatterns[]를 참조하도록 작성해주면, 다음과 같은 과정으로 index() 메소드에 도달하게 된다.

/urls -> /users.urls -> /users.views -> index()

 

 

 

5. 실행 결과

"Hello, Django!" 문구가 잘 출력되었다.

 

반응형

댓글