Day 19 Django for KN

김의석 ·2024년 2월 23일

Django

목록 보기
19/39

Django for KN(Koinonia)

  • 해당 문서는 사귐의 교회 청소년부 출석부 프로젝트를 위한 Django 학습 내용과 개발 과정을 기록함

path와 re_path를 통한 URL패턴 정의

정규표현식

URL 정규표현식(Regular Expression)은 특정한 규칙에 따라 문자열 패턴을 정의하고 매칭시키기 위한 표현식

어떠한 값에 특정한 규칙에 따라 정의된 패턴이 발견되면 views에 매칭시켜로 전달해라!

URL Captured Value 타입

URL 문자열에서 특정 패턴의 값을 캡쳐하여 view에 전달하는 값

path(route="<int:pk>/", view1) # Converter에 의해 변환된 값으로 뷰 함수에 인자를 전달
re_path(route=r"^(?P<pk>\d+)$", view2) # 정규표현식을 통한 매칭만 수행하기에 항상 문자열로 뷰 함수에 인자를 전달

# Converter
class IntConverter: #  + uuid, str
	return int(value)

엄격하게 패턴을 지정하야한다. 불필요한 view 호출과 리소스 낭비를 줄일 수 있다.

urlpatterns = [
path(route="<str:pk>/cover.png", view=views.cover_png), # 불필요한 호출 발생
# pk는 숫자인데 숫자가 아닌 경우에도 매칭되어 ex) /hottrack/hello/cover.png
# - 물론 View에서 404 오류가 발생할 테지만
# - 모든 미들웨어가 호출되고 View가 호출되고 데이터베이스까지 조회하고 나서야 404 오류 응답 => 서버 리소스 낭비
# - 그리고 View 인자를 그대로 Raw SQL 쿼리 작성에 사용될 때 예상치 못한 쿼리로 SQL Injection 공격에 노출될 수도 있습니다. path(route="<str:pk>/cover.png", view=views.cover_png),

# 아래의 경우 숫자 패턴이 아닌 경우에는 매칭되지 않고 다음 패턴을 검사합니다. 
# 숫자 패턴인 경우에만 cover_png 뷰를 호출합니다. 
path(route="<int:pk>/cover.png", view=views.cover_png),
]
profile
널리 이롭게

0개의 댓글