- 요청에 들어있는 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로 배우는 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍
'Django' 카테고리의 다른 글
| 10. Template 구성 - 파일 구조, 템플릿 필터 (0) | 2021.04.08 |
|---|---|
| 9. View 구성 - 함수형 뷰 구성 (0) | 2021.04.08 |
| 7. Model - 데이터베이스 정의 및 Admin 페이지에 등록하기 (0) | 2021.04.08 |
| 6. Django 웹 프레임워크 (0) | 2021.04.07 |
| 5. WSGI (Web Server Gateway Interface) (0) | 2021.04.07 |