사람이 몸이 아프면 병원에 간다. 동네 병원에선 바로 의사를 만날 수 있지만, 종합병원의 경우에는 로비에서 환자들을 분류해 증상과 관련된 과로 연결해 준다. 도착한 환자들은 각자 자신의 증상을 말하고, 진찰 후 증상별로 다른 처방을 받아 돌아갈 것이다.
장고의 라우팅 방식도 이와 유사하다. 장고 프로젝트와 같이 생성되는 메인 앱이 로비의 역할을 하고, URL 요청에 대해 해당 URL을 처리하는 앱에게 전달한다. 그럼 앱은 해당 요청과 매핑된 함수를 실행해서 응답을 반환하게 된다.
아래 코드를 보자.
# config/urls.py
...
urlpatterns = [
path('user/', include(user.urls))
path('board/', include(board.urls)
]
위 코드는 'user/'
로 시작하는 URL을 user/urls.py
로 매핑하고 'board/...'
는 board/urls.py
로 매핑한다. 각 앱들을 살펴보자.
# user/urls.py
...
urlpatterns = [
path('sign_up/', views.sign_up),
path('sign_in/', views.sign_in),
path('logout/', views.logout),
]
# user/views.py
...
def sign_up(request):
...
def sign_in(request):
...
def logout(request):
...
user
내의 urls.py
에서 나머지 URL을 views.py
에 구현된 함수와 매핑한다. 이때 sign_up
함수와 매핑되는 전체 URL은 'user/sign_up'
이다. config
앱에서 이미 'user/'
가 매핑되었기 때문에 생략이 가능하다.
# board/urls.py
...
urlpatterns = [
path('', views.home),
path('write/', views.write),
path('delete/', views.delete),
]
# board/views.py
...
def home(request):
...
def write(request):
...
def delete(request):
...
home
으로 매핑된 URL은 ''
이다. 따라서 이 경우에는 'board/'
가 전체 URL이 될 것이다.