3. Using django(=topics)
3.3.1 URI dispatcher
02. How Django processes a request
장고는 사용자의 요청을 어떻게 처리하는가?
(원본 문서 위치 : topics/http/urls)
사용자가 장고로 만들어진 사이트에 요청을 보내면, 다음 과정을 따라 그 요청에 적절한 파이썬 코드가 작동하게 됩니다.
장고가 어떤 root URLconf 모듈을 사용할지 선택합니다. 보통 이 값은 settings.py의 ROOT_URLCONF 에 들어있습니다. 하지만 새로 만든 HttpRequest 객체가 urlconf 속성을 가지고 있다면(middleware에 설정된) 그것의 값이 settings.py의 ROOT_URLCONF에 기록되어 있어야 합니다.
장고는 파이썬 모듈을 불러온 다음 urlpatterns 라는 변수를 찾으려고 할 것입니다. 이것은 반드시 django.conf.urls.url() 라는 파이썬 리스트 인스턴스로 되어 있어야 합니다.
장고는 각각의 URL 패턴을 지나칩니다. 순서대로. 그리고 요청된 URL과 일치하는 첫번째 패턴을 찾으면 멈춰섭니다.
정규표현식중 하나에서, 장고는 주어진 뷰를 불러옵니다. 그것은 아주 단순한 파이썬 함수입니다. (또는 클래스 기반 뷰) 이 뷰는 뒤따르는 인수에게 전달됩니다.
- HttpRequest 인스턴스
- 만약 일치하는 정규 표현식이 아무 이름도 없는 그룹을 돌려주면, 그 정규식을 통한 일치값은 위치인수(positional arguments)로 제공됩니다.
- 키워드 인수는 정규표현식에 일치한 namedgroups로 구성됩니다. 이 때 정규표현식은 선택적 키워드 인수로 지정된 인수로 덮어씌워진 상태입니다. (The keyword arguments are made up of any named groups matched by the regular expression, overridden by any arguments specified in the optional kwargs argument to django.conf.urls.url().
정규표현식이 하나도 일치하지 않으면, 또는 이 과정 중 어느 부분에서라도 오류가 발생하면, 장고는 그 상황에 대한 오류 메시지를 내보낼 것입니다.
그러니까 좀 정리를 해보자면, 사용자가 request를 보낸다. 이 requset도 어쨌든 url의 형태다. 이게 먼저 setting에 들어갔다가, setting에서 root url 로 가라고 하니까 그 쪽으로 간다. root url에는 각 모델에서 온 url들이 모여있고, 장고는 그걸 뒤지기 시작한다.
root urlconf 에는 urlpatterns라는 변수가 있고, 이건 모양이 django.conf.urls.url()처럼 생겼음. 괄호 안에 각각 다른 내용이 들어감. 장고는 이 url patterns을 죽 훑고 지나가다가 맞는게 있으면 거기 멈춤
이 패턴을 통해서 뷰를 호출함.
views는 view들이 모여사는 동네.
urls도 url들이 모여사는 동네 ...