Django 1.x 버전에서의 django.conf.urls.url()의 대한 사용법이
path()와, re_path()로 나누어졌습니다.
re_path() - django.conf.urls.url()와 동일
path() - Django가 기본적으로 제공하는 Path Converter를 통해 정규표현식 기입이 간소화되었습니다.
기본 제공되는 Path Converter
IntConverter - r"[0-9]+"
StringConverter - r"[^/]+"
UUIDConverter - r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
SlugConverter (StringConverter 상속) - r"[-a-zA-Z0-9_]+"
PathConverter (StringConverter 상속) - r".+"
정규 표현식 패턴 예시
1자리 숫자 - "[0123456789]" 혹은 "[0-9]" 혹은 r"[\d]" 혹은 r"\d"
2자리 숫자 - "[0123456789][0123456789]" 혹은 "[0-9][0-9]" 혹은 "\d\d"
3자리 숫자 - r"\d\d\d" 혹은 r"\d{3}"
2자리~4자리 숫자 - r"\d{2,4}"
휴대폰 번호 - r"010[1-9]\d{7}"
알파벳 소문자 1글자 -r "[abcdefghijklmnopqrstuvwxyz]" 혹은 "[a-z]"
알파벳 대문자 1글자 - r"[ABCDEFGHIJKLMNOPQRSTUVWXYZ]" 혹은 "[A-Z]"
한글이름 2글자 혹은 3글자 - r"[ㄱ-힣]{2,3}"
성이 "김"씨인 이름 - r"김[ㄱ-힣]{1,2}"
URL에 path(), re_path(), 정규표현식을 사용한 예시
path('archives/<int:year>/', archives_year),
URL로 archives/2020/ 등 int 형태의 정수만 온다면 정상적으로 HttpResponse 반환합니다.
위의 path를 정규표현식을 사용하여 표현 해보면,
re_path(r'archives/(?P<year>\d+)/', archives_year),
로 나타낼 수 있습니다.
정규표현식을 활용해 4자리 정수만 받을 수 있도록 제한할 수 있습니다
re_path(r'archives/(?P<year>\d{4})/', archives_year),
4자리의 정수가 매칭될 경우에만 정상적으로 HttpResponse를 반환, 4자리보다 크거나 작은 크기의 정수가 온다면 HTTP 404 에러를 반환 합니다.
좀 더 활용해 보면 2000년대의 연도만 받도록 제한을 할 수도 있습니다.
re_path(r'archives/(?P<year>20\d{2})/', archives_year),
이런식으로 말이죠. 2000년대의 연도가 오면 정상적으로 작동하고, 나머진 404에러를 반환합니다.
기존 path()에서도, re_path에서 정규표현식을 통해 year에 제한을 주듯이 register_converter을 통해 적용 시킬수 있습니다.
from django.urls import register_converter
class YearConverter:
regex = r"20\d{2}"
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
register_converter(YearConverter, 'year')
path('archives/<year:year>/', archives_year),
이런식으로 path()에서도 register_converter를 사용하여 2000년대의 연도만 접근하실 수 있는걸 볼 수 있습니다.
AskCompany의 장고/리액트 강의를 바탕으로 작성하였습니다.
'아카이브' 카테고리의 다른 글
200328 / TIL (0) | 2020.03.28 |
---|---|
200325 / TIL (0) | 2020.03.25 |
200320 / TIL (0) | 2020.03.20 |
200318 / TIL (0) | 2020.03.18 |
200317 / TIL (0) | 2020.03.17 |