-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
urlpatterns 질문
22.02.09 11:00 작성 조회수 130
0
아래처럼 urlpatterns를 작성하면 될 것 같은데 re_path를 사용하시는 이유가 무엇인가요?
답변을 작성해보세요.
0
이진석
지식공유자2022.02.09
안녕하세요.
User 모델의 username 필드는 기본 validators가 지정되어있고, 기본 validators를 통해 [\w.@+-]+ 패턴이 강제되고 있습니다. 모든 username은 [\w.@+-]+ 패턴으로 저장이 되는 것이죠.
- 관련 소스코드 #1 : https://github.com/django/django/blob/3.0.14/django/contrib/auth/models.py#L330
- 관련 소스코드 #2 : https://github.com/django/django/blob/3.0.14/django/contrib/auth/validators.py#L19
물론 말씀하신 대로 path converter인 str을 통해 러프하게 문자열 패턴을 지정하실 수도 있습니다. str의 정규표현식은 [^/]+
입니다.
- path converter 공식문서 : https://docs.djangoproject.com/en/4.0/topics/http/urls/#path-converters
러프하게 지정하실 경우, username!
과 같은 실제 유저명으로 저장될 수 없는 URL로 요청이 들어와도 user_page 뷰 함수가 호출이 되게 됩니다. 물론 DB에 쿼리했을 때 DoesNotExist 예외가 발생하기에 유저 입장에서는 정상처리가 됩니다.
하지만 패턴을 [\w.@+-]+
로 지정하신다면, 유저명 패턴에 맞지 않는 요청은 뷰 함수 호출 전에 걸러져서, 서버에 불필요한 부하를 전달되는 것을 막을 수 있습니다. 유저명 패턴에 맞는 요청만 DB에 쿼리가 되는 거죠.
그리고 user_page 뷰에 대한 URL Reverse 시에 유저명 패턴에 맞지 않는 값이 전달되었을 때에도, 에러를 발생시킬 수 있기 때문에, 보다 엄격하게 URL 관리를 해줄 수 있게 됩니다.
답변 1