본문 바로가기

Python-Django

Django 개발 : URLconf - URL 정의

- 클라이언트로부터 요청을 받으면 장고는 가장 먼저 요청에 들어있는 URL을 분석함

- 즉, 요청에 들어있는 URL이 urls.py 파일에 정의된 URL패턴과 매칭되는지를 분석함

 

  • URL/뷰 매핑 (URLconf)

from django.urls import path

from . import view

 

urlpatterns = [

    path('articles/2003/', views.special_case_2003),

    path('articles/<int:year>/',view.year_archive),

]

 

- articles/2003/ 부분 : URL

- views.special_case_2003 부분 : 처리 함수(뷰)

 

  • 웹 클라이언트가 웹 서버에 페이지 요청 시, 장고에서 URL을 분석하는 순서를 간단히 요약하면 다음과 같음
    • setting.py파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf(urls.py)의 위치를 알아냄
    • URLconf를 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사
    • 위에서부터 순서대로 URL 리스트의 내용을 검사하면서 URL 패턴이 매치되면 검사를 종료함
    • 매치된 URL의 뷰를 호출함(뷰 : 함수 또는 클래스의 메소드)
    • 호출 시 HttpRequest 객체와 그리고, 매칭할 때 추출된 단어들을 뷰에 인자로 넘겨줌
    • URL 리스트 끝까지 검사했는데도 매칭에 실패하면 에러를 처리하면 뷰를 호출
  • <int:year> : URL 패턴의 일부 문자열을 추출하기 위한 것으로 <type:name> 형식으로 사용으로
    • ex) URL이 /articles/2018/처럼 <> 부분이 정수이면 매치되고 /articles/post/처럼 정수가 아니면 매치되지 않음
    • 매치된 경우, 매치된 문자열 2018을 인자명 year에 할당함
    • 즉, 요청 URLdl /articles/2018이면 뷰 함수를 views.year_archive(request, yaer=2018)처럼 호출
    • 꺽쇠 부분을 장고에서는 Path Converter라고 부르는데, 여기에 사용되는 타입은 다음과 같음
      • str : /(슬래시)를 제외한 모든 문자열과 매치(디폴트 : str)
      • int : 0 또는 양의 정수와 매치 (int타입)
      • slug : slug 형식의 문자열(ASCII, 숫자, 하이픈, 밑줄로만 구성됨)과 매치
      • uuid : UUID 형식의 문자열과 매치됨. 매치된 문자열은 파이썬의 UUID 타입으로 변환됨
      • path : /(슬래시)를 포함한 모든 문자열과 매치됨. 이는 URL 패터의 일부가 아니라 전체를 추출하고 할 때 사용
      • URL 표현식에 정규표현식을 사용하면 URL을 좀 더 세밀하게 표현하거나, 복잡한 URL도 표현 가능함