URLconf는 클라이언트의 요청 URL에 따라 view에 정의된 웹사이트의 기능 중 수행해야 할 기능을 연결하는 역할을 진행한다.
장고 내부에 정의된 웹사이트 기능을 사용하기 위해서는 반드시 해당 기능과 연결되는 URL Pattern이 함께 정의되어야 한다.
프로젝트 폴더의 하위 파일 'urls.py'에서 진행하며,
주로 계층구조 형식의 URL Pattern을 구현한다.
계층구조 형식의 URL Pattern이란,
프로젝트 폴더의 urls.py에서 하위 app의 url.py를 호출하여 사용하는 형식이다.
프로젝트: url.py -> app: url.py 연결
계층화를 통해 URLconf의 view connection을 App별로 분리할 수 있다.
따라서 확정성, 이식성, 유연성을 갖게된다.
만약 URL Pattern과 연결되지 않은 클라이언트의 URL요청이 발생할 경우 Page Not Found(404 Error Code)가 출력된다.
먼저 가상환경에 진입한 상태에서 시작한다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # 매핑된 admin 코드
path('MTV/', include('MTV.urls')), # MTV 추가
]
위에서 설명했듯 URLconf는 위 클래스에서 요청된 URL과 일치하는 패턴이 있는지 가장 먼저 확인한다.
추가된 코드의 의미는 다음과 같다.
'MTV/' URL의 요청이 들어오면 MTV app폴더의 urls.py 파일에서 처리하겠다.
참고로 path는 패턴을 설정할 수 있는 함수다.
from django.urls import path
from MTV import views
app_name = "MTV"
urlpatterns = [
path('', views.index), # 요청이 들어오면 veiws클래스의 index함수 기능수행
]
MTV.urls.py에서 처리하겠다고 했는데 파일이 없으면 오류가 발생하므로 생성해서 위의 코드를 작성해 준다.
추가한 코드의 의미는 다음과 같다.
먼저 path함수에서 첫번째에 ''로 공란인 이유는 한 번 config.urls.py에서 넘겨받았기 때문이다. app_name이라고 생각하면 된다.
이쪽으로 넘어온 요청은 views.py에 정의된 index함수라는 기능을 수행하게 된다.
위에서 from MTV import views 를 호출하는 이유는 어떤 폴더에 들어있는 views.py인지를 알 수 없기 때문에 MTV.views.py라는 것을 알려주는 것이다.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, World. Django Index Page")
위 코드를 차례로 살펴보면
from django.http import HttpResponse에서 HttpResponse 클래스는 페이지 요청에 대한 응답을 해야할 때 호출하는 클래스다.
views.py 에서는 요청받을게 있을수도 있으니 항상 매개변수로 request를 적어준다. 따라서 index함수를 정의할 때에도 매개변수로 request를 사용한 모습이다.
return HttpResponse() 에서 HttpResponse는 ()안의 값을 html로 바꿔주는 역할을 한다.
위에서 패턴정의가 끝났으면 서버를 실행해서 나온 URL을
클라이언트 주소창에 적고 끝에 /MTV를 추가해보자.
요청된 URL의 MTV가 패턴과 일치하는게 있는지 URLconf가 확인 후 해당 app의 urls.py에 들어간다. 그 후 거기서 연결해 놓은 기능수행을 위해 view.py에서 해당 기능을 찾아 수행한 후 다시 클라이언트에게 응답을 보낸다.
위 과정을 통해 우리는 화면에서
Hello, World. Django Index Page
라는 문장을 받을 수 있을 것이다.