장고 서버를 실행하고 127.0.0.1:8000
URL을 입력하면 초기 페이지가 표시됩니다. 메인 URL뒤에 /challenges/first
와 같은 URL을 추가하고 싶다면 어떻게 할까요?
URL 추가 및 Views 구성 방법
해당 앱 디렉토리에서 urls.py를 생성합니다. 이렇게하면 앱 디렉토리에 urls.py와 프로젝트 메인 디렉토리에 urls.py가 각각 존재하게 됩니다. 이전 포스팅에서 urls.py의 역할은 views.py의 로직을 트리거하는 것이라고 정리했는데요. 다음과 같이 django.urls
의 path
함수를 통해 이를 처리할 수 있습니다.
# challenges/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("first", views.index)
]
path
함수는 두 가지 아규먼트를 받습니다. 첫 번째 아규먼트는 추가하려는 URL입니다. 두 번째 아규먼트는 해당 URL을 통해 실행될 view.py 내 함수입니다. 여기서는 views.py 내의 index
함수(아직 생성하지 않음)로 지정해보겠습니다.
이제 views.py에서 실행될 내용을 설정할 차례입니다. Views.py의 초기 상태는 다음과 같습니다.
from django.shortcuts import render
# Create your views here.
요청과 응답 처리 테스트를 위해 다음과 같이 URL에서 트리거할 함수를 추가해보겠습니다.
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Response is here!")
다음으로 상위 디렉토리인 mysite의 urls.py로 이동합니다. 초기 상태는 다음과 같습니다.
# mysite/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
여기에 새롭게 추가할 URL을 지정해줍니다. django.urls
의 incldue
함수를 통해 다음과 같이 challenges 내의 모든 url들을 추가할 수 있습니다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('challenges/', include('challenges.urls'))
]
서버를 실행하고 http://127.0.0.1:8000/challenges/first
을 방문하면 앞서 설정했던 "Response is here!"이라는 응답이 HTML 파일로 화면에 출력되는 걸 확인할 수 있습니다.
이상을 정리해보자면 다음과 같습니다.
- 사용자가
http://127.0.0.1:8000/challenges/first
를 주소창에 입력 - 파이썬에서 URLconf 해석(mysite의 urls.py에서 분석) 후
challenges
에 해당하는 challenges urls.py로 전달 - challenges의 urls.py에서
first
에 해당하는 views.py의 로직인index
함수 호출 index
함수 리턴 값이 사용자에게 전달됨
동적인 방식으로 URL 처리하기
마지막으로 동일한 앱 URL 아래 여러 URL들이 추가될 경우 이를 동적으로 처리하는 방법에 대해 알아보도록 하겠습니다. challenges urls.py에서 아래와 같이 url 부분을 변경해 줍니다.
urlpatterns = [
path("<count>", views.count)
]
이후 views.py에서 해당 부분을 아규먼트로 받아 처리하면 동적인 방식으로 URL 처리가 가능합니다.
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound
def count(request, count):
response_message = ''
if count == 'first':
response_message = 'This is first message.'
elif count == 'second':
response_message = 'This is second message.'
else:
return HttpResponseNotFound("This is not supported count")
return HttpResponse(response_message)
'Django' 카테고리의 다른 글
장고 HTTP 리퀘스트 유효성 검사 및 에러 메시지 작성 방법 (0) | 2022.01.16 |
---|---|
장고 데이터 모델 작성과 CRUD 테스트 방법 (0) | 2022.01.11 |
장고 URL과 Views의 개념 및 역할 (0) | 2022.01.10 |
장고의 작동 방식과 MVT 패턴 (0) | 2022.01.10 |
장고 앱이란? 앱 생성 방법 (0) | 2022.01.10 |