본문 바로가기
프로그래밍/PYTHON

장고 : url과 뷰

by AutoTechGuru 2023. 7. 21.
SMALL

이제 차근차근 myapp를 만들면서 장고의 기능을 하나씩 알아가 보자.

앱(App)

우리는 앞에서 mysite 프로젝트를 생성했다. 하지만 프로젝트 단독으로는 아무런 일도 할 수 없다. 프로젝트에 기능을 추가하기 위해서는 앱을 생성해야 한다. 이제 게시판 기능을 담당할 myapp 앱을 생성해 보자.


(mysite) C:\projects\mysite> django-admin startapp myapp
(mysite) C:\projects\mysite>

Hello Myapp

이제 본격적으로 장고 프로그램을 만들어 보자.

브라우저에서 http://localhost:8000/myapp 페이지를 요청했을 때 "안녕하세요 myapp에 오신 것을 환영합니다."라는 문자열을 출력하도록 만들어 보자.


(mysite) C:\projects\mysite> python manage.py runserver

urls.py

URL 매핑을 추가하기 위해 config/urls.py 파일을 다음과 같이 수정하자.


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

from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', views.index),
]

views.py

이제 다시 http://localhost:8000/myapp 페이지를 요청해 보자. 아마도 "사이트에 연결할 수 없음"이라는 오류가 화면에 표시될 것이다. 오류의 원인은 URL 매핑에 추가한 뷰 함수 views.index가 없기 때문이다.

그렇다면 이제 myapp/views.py 파일에 index 함수를 추가해야 할 것이다. 다음과 같이 추가해 보자.


from django.http import HttpResponse


def index(request):
    return HttpResponse("안녕하세요 myapp에 오신것을 환영합니다.")

장고 개발 흐름 정리하기

지금 여러분이 경험한 개발 과정은 앞으로의 실습 과정에서 여러 번 반복될 것이다. 그만큼 이 과정은 중요하다!

장고의 기본적인 흐름을 다시 정리해 보자.

  • [1] 브라우저에서 로컬 서버로 http://localhost:8000/myapp 페이지를 요청하면
  • [2] urls.py 파일에서 /myapp URL 매핑을 확인하여 views.py 파일의 index 함수를 호출하고
  • [3] 호출한 결과를 브라우저에 반영한다.

URL 분리

잠깐, 다음으로 넘어가기 전에 config/urls.py 파일을 좀 손봐주어야 할 것 같다. 다시 강조하지만 myapp 앱에 관련한 것들은 myapp 앱 디렉터리 하위에 위치해야 한다. 하지만 이대로라면 myapp와 관련된 URL 매핑을 추가할 때마다 config/urls.py 파일을 수정해야 한다. config의 urls.py 파일은 앱이 아닌 프로젝트 성격의 파일이므로 이곳에는 프로젝트 성격의 URL 매핑만 추가되어야 한다. 따라서 myapp 앱에서만 사용하는 URL 매핑을 config/urls.py 파일에 계속 추가하는 것은 좋은 방법이 아니다.

좋은 방법이 있다. 먼저 config/urls.py 파일을 다음처럼 수정하자.


from django.contrib import admin
from django.urls import path, include
from myapp import views  # 더 이상 필요하지 않으므로 삭제

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

그렇다면 이제 myapp/urls.py 파일을 생성해야 한다. 파이참에서 myapp/urls.py 파일을 생성하기 위해 [myapp → 마우스 오른쪽 클릭 → New → File]을 한 다음 파일명으로 urls.py를 입력하자.

그리고 myapp/urls.py 파일은 다음과 같이 작성하자.


from django.urls import path

from . import views

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

이제 다시 http://localhost:8000/myapp 페이지를 요청해 보자. URL 분리 후에도 동일한 결과가 나타나는 것을 확인할 수 있을 것이다.

LIST