URL Dispatcher와 정규 표현식

guava·2021년 11월 30일
0

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

URL Dispatcher


  • 프로젝트/settings.py에서 최상위 URLConf 모듈을 지정
  • HTTP 요청이 들어오면 등록된 urlpatterns상의 매핑 리스트를 순차적으로 훑으며 URL 매칭을 시도한다.

정규표현식


  • urlpatterns에서 기본 제공되는 Path Converters를 사용해도 된다.
    • ex) path('<int:pk>/', views.post_detail),
  • 그러나 정규표현식+커스텀 컨버터를 통해 보다 타이트하게 규칙을 적용할 수 있다.

정규표현식 패턴 예시

1자리 숫자 → [0123456789] or [0-9] or r"[\d]" or r"\d"
2자리 숫자 → [0123456789][0123456789] or [0-9][0-9] or \d\d
3자리 숫자 → r"\d\d\d" or r"\d{3}"
2자리~4자리 숫자 → r"\d{2,4}"
휴대폰 번호 → r"010[1-9]\d{7}"
알파벳 소문자 1글자 → [abcdefghijklmnopqrstuvwxyz] or [a-z]
알파벳 대문자 1글자 → [ABCDEFGHIJKLMNOPQRSTUVWXYZ] or [A-Z]

반복 횟수 지정 문법

r"\d" : 별도 횟수 지정이 없음. 1회 반복
r"\d{1}": 1회 반복
r"\d{2}": 1회 반복
r"\d{2,4}": 2회~4회 반복
r"\d?": 0회 혹은 1회 반복
r"\d*": 0회 이상 반복
r"\d+": 1회 이상 반복

커스텀 Path Converter

2000년대 이상만 매칭되도록 설정. URL 캡쳐 문자를 보다 타이트하게 적용 가능.

class YearConverter:
    regex = r'20\d{2}'

    def to_python(self, value):
        # URL로부터 추출한 문자열을 뷰에 넘겨주기 전에 변환한다.
        return int(value)

    def to_url(self, value):
        # url reverse시에 호출된다.
        return str(value)
        
register_converter(YearConverter, 'year')

urlpatterns = [
    path('archives/<year:year>/', views.archives_year),
    re_path(r'archives/(?P<year>20\d{2})/', views.archives_year),
    # 위와 같이 직접 URL에 정규표현식 적용이 가능
]

0개의 댓글