• 요청에 들어있는 URL이 urls.py 파일에 정의된 URL 패턴과 매칭되는지를 분석한다.
# 프로젝트의 urls.py
from django.contrib import admin
from django.urls import path, include
from djangoProject.view import AboutView
urlpatterns = [
    path('admin/', admin.site.urls),
    path('about/', AboutView.as_view()),
    path('polls/', include('polls.urls')),
    path('books/', include('books.urls')),

]

 

  • settings.py 파일의 ROOT_URLCONF 항목을 통해 최상의 URLconf(urls.py)의 위치를 설정한다.
  • urlpatterns 변수에 지정되어 있는 URL 리스트를 확인한다.
  • 우선 순위는 위에서부터 아래순이다.
  • 매치된 URL의 뷰를 호출. 뷰는 함수 또는 클래스의 메소드이다. 호출 시 HttpRequest 객체와 그리고, 매칭할 때 추출된 단어를 뷰로 넘겨준다.
  • URL 매칭에 실패하면 에러를 처리하는 뷰를 호출한다. 

 

-URLconf의 계층화

path('polls/', include('polls.urls')),
# 프로젝트 하위의 app의 urls.py
from django.urls import path
from polls import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/vote', views.vote, name='vote'),
    path('<int:question_id>/results', views.results, name='results'),
    path('yourname/', views.get_name, name='yourname'),
]

프로젝트 urls.py에서 app urls.py를 include를하면 계층화 하여 관리할 수 있다. 이와 같이 구성하면 변경도 쉬워지고, 확장도 용이하다.

1개의 URLconf로 코딩하는 경우 app_name등이 변경될 경우 모든 패턴의 URL를 변경해야하지만 2개의 URLconf로 구성할 경우  상위 URLconf에서 하나의 패턴만 수정하면 된다.

 

 

- Path Converter

꺽쇠 부분(<>)을 말하는데. 기본적으로 제공하는 타입이 있고ㅡ 개발자가 추가로 타입을 등록할 수도 있다.

  • str: /(슬래시)를 제외한 모든 문자열과 매치된다. 타입이 지정되지 않았다면 디폴드로 str 타입을 사용
  • int: 0 또는 양의 정수와 매치된다. 매치된 정수를 파이썬의 int 타입으로 변환
  • slug: slug 형식의 문자열(ASCII, 숫자, 하이픈, 밑줄로만 구성됨)과 매치
  • uuid: UUID 형식의 문자열과 매치, 매치된 문자열은 파이썬은 UUID 타입으로 변환
  • path: /(슬래시)를 포함한 모든 문자열과 매치된다. 이는 URL 패턴의 일부가 아니라 전체를 추출하고자 할때 많이 사용한다.

- 정규 표현식(Regular Expression)

from django.urls import path, re_path

from . import views

urlpatterns = [
	path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?p<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

(?P적용할 패턴)을 작성한다.

ex) r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$'

artlcles로 시작하고 year는 0부터 9까지의 4자리의 정수이고 month는 0부터 9까지의 2자리 정수 slug는 영문, 숫자 , 밑줄(_), 하이픈(-)  한 개 1번 이상 반복

 

- 정규표현식에 사용되는 문자들

표현 의미
.(Dot) 모든 문자 하나
^(Caret) 문자열의 시작
$ 문자열의 끝
[] []괄호에 있는 문자 하나, [akz]이면 a 또는 k 또는 z
[^ ] []괄호에 있는 문자 이외의 문자 하나. [^ab]이면 a와 b를 제외한 문자 하나
* 0번 이상 반복, {0,}와 동일
+ 1번 이상 반복, {1,}와 동일
? 0번 또는 1번 반복, {0,1}과 동일
{n} n번 반복
{m.n} 최소 m번에서 최대 n번까지 반복
| A|B이면 A 또는 B
[a-z] a에서 z까지 임의의 문자, 즉 영문 소문자 한 개
\d 숫자 한 개, [0-9]와 동일
\w 영문, 숫자 또는 밑줄(_) 한 개, [0-9a-zA-Z_]와 동일

 

출처: 한빛미디어, Django로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍

+ Recent posts