수신 된 요구는 URL에 기초하여 특정 클래스 함수 또는 처리 요구가 시스템과 일치한다 라우팅.
시스템 카테고리 라우팅 :
웹 사이트 프레임 워크 라우팅 시스템은 일반적으로 두 가지 범주, FBV, CBV, 장고 지원으로 구분하지만 일부 지원 단 하나의 프레임이다.
FBV (기능 자료보기) 뷰에 기초 함수 views.py에서, 기능 처리 요구.
CBV (클래스 자료보기) : 클래스보기는 views.py에서 기반 클래스 처리 요청.
URLS.PY 라우팅 구성 파일
두 기능을 하나의 함수로 직접 이동하는 것입니다, 경로 낮은 urls.py로 이동
urlpatterns = 패스 (r'blog / 'blog.views.index), 경로 (r'bbs /'bbs.views.index) ]
1 라우팅 룰 매칭 기능 모듈 URL, 경로 re_path :
장고 1.XX 대가 고정 된 문자열을 사용할 수 있습니다, 정기적으로 사용할 수있는 URL 기능을 사용하여
장고 2.XX 나중에 경로와 re_path를 사용,
django.conf.urls에서 수입 URL 번호는 1.XX 대가에게 URL 장고 django.conf.urls 가져 오기 URL에서, re_path # 2.XX 사용 장고 URL과 re_path re_path 번호의 장고 2.1 배 통합, 사용 후 django.urls 가져 오기 경로에서를, 경로와 re_path
URL : 정규식과보기, 2 개의 옵션 : kwargs로, 이름과 URL () 함수는 네 개의 매개 변수, 두 개의 필수 전달됩니다. 즉, 정규 표현식 및 뷰는 두 개의 필수 매개 변수입니다.
1.xx에는 버전 - 전체 일반 고정 일치
2.XX 버전 - 예약
경로 : 정합이 완료되면, 경로 지정 문자열 포맷의 기능 또는 ()는 네 개의 파라미터를 가지고, 두 개의 파라미터이어야 route
하고 view
두 개의 선택적인 매개 변수 : kwargs
및 name
. 그보기는 필수 매개 변수 및 라우팅입니다
고정 경기에서 - 2.1 버전 이후
re_path : 일반 경기, 경로 일치를 완료 할 수 있습니다
2.XX 버전 - 기본 위치 django.conf.urls
- 통합 위치 django.urls
2 경로 기능 :
형식 : 경로 (규칙 일치 뷰 클래스 함수 또는 방식을 볼 ** kwargs로 이름)
규칙을 일치하는 것은 : 일반 지원하지만 경기 자체는 5 가지 모드를 제공하지 않습니다
INT 매치 0과 양의 정수, 등 (1230)
STR 경기 /를 제외하고 비어 있지 않은 문자열
슬러그 문자열 문자, 숫자 및 바, 밑줄을 일치.
UUID UUID는 대상, 일치 등 075194d3-6885-417e-a8a8-6c931e272f00을. (객체 대시를 포함한다 - 모든 소문자 여야)
매치 포함한 경로 / 모든 문자열 (즉 전체 전방 및 후방 패스)
뷰 또는 뷰 클래스 : 응용 프로그램 views.py 또는 클래스 메소드의 방법
kwargs로 : 뷰 송신 파라미터
이름 : 후단 역 분석은 말단 이름 값 따른 연관된 라우팅을 찾는
3 path-- 매칭 규칙 :
일반적으로 삼가지 경우, 매개 변수 일치하는 매개 변수 일치 고정 된 형식과 정확히 일치로 나누어
오기 re_path에서 경로 django.urls 오기 index.views 임포트 pathtest.views 의 urlpatterns = [ (r'pathtest / 'pathtest.views.index), 패스 #의 r'pathtest /'일치, 전단 pathtest / 1 2 3을 이용하여 파라미터들 전달되고있다. # 현재 경로, pathtest / 2. 1. 3, 이들 중 어느 것과도 일치하지 않았다. 경로 (r'pathtest <ID_1> <ID_2> ', pathtest.views.index), #의 <> URL에서 캡처 값, pathtest을 / 1 파라미터를 수신한다 pathtest.views.index 함수, 그렇지 않으면 에러가 상기 인자 일 수있다 kwargs로에게있을 수 있는 예기치 않은 키워드 인수 "ID_1"GOT () # 인덱스 'pathtest : 경로 (r'pathtest <book_id STR을> .views.index) # str을 정합 형 파라미터라는 book_id는 views.index 전달 함수 #의 STR, INT 슬러그 UUID , 클리핑, 기본 패턴과 일치 오가지 ]
4 패스 - 뷰 또는 뷰 클래스 방법
이 규칙 views.py 기능 (FBV) 또는 처리 요구 클래스 (CBV)를 지정
FBV : urls.py 처리 후의 요구 함수 인덱스에 대한 요청, 인덱스를 처리 한 후에 상기 클라이언트로 pathtest.html 페이지를 리턴한다.
urls.py
오기로부터 경로 re_path의 django.urls 오기 index.views 의 urlpatterns = : 경로 ( 'pathtest.views.index r'pathtest <book_id STR>) #의 STR, INT 슬러그 UUID 경로 기본적 정합 다섯 가지 모드 ]
views.py
django.shortcuts 렌더링 가져올에서 DEF 지수 (요청 인수를 *, ** kwargs로) 파라 = [] 경우 kwargs로 : : K, V kwargs.items ()에 대한 잉크 (K '', V)를 인수하는 경우 : 에 대한 인수에 내가 : 인쇄 (내가) 렌더링 반환 (요청, 'pathtest.html을', { '파라'파라})
CBV :
1, 클래스 뷰 클래스는 django.views.generic 상속 할 필요가
2에 APP.views. 클래스 .as_view URLS.py 라우팅 포워딩 ()
3 as_view는 ()는 다시 작성하지 않아도 View 클래스를 상속
도 4는 탄성 표면파가 사용자 요청 방식으로 hasattr 의해 결정되는 일반적인 방법 \의 base.py를 참조 as_view
dispach하여 해당 기능 요청 방법을 실행
5 할 수 있습니다 사용자 정의 http_method_names 등록 할 수있는 새로운 방법을 구현
예 :
http://127.0.0.1:8000/pathtest1/ 디스플레이 CBV1
http://127.0.0.1:8000/pathtest2/ 디스플레이 CBV2
URL.py
django.urls는 re_path 경로에서 가져 오기 pathtest.views urlpatterns = 패스 (r'pathtest1 / 'pathtest.views.CBV1.as_view ()), 경로 (r'pathtest2 /'pathtest.views.CBV2.as_view ( )) ]
APP : pathtest Views.py
django.view.generic 수입에서 클래스 CBV1 (보기) : 데프 (자동, 요청, * 인수, ** kwargs로)를 얻을 : HttpResponse에를 반환 ( '<H1> CBV1 </ H1은>') 클래스는 CBV2 (보기) : DEF 수 (자기, 요구, 인수 *, ** kwargs로) HttpResponse에를 반환 ( '<H1> CBV2 </ H1>')
5 kwargs로 : 뷰 송신 파라미터
인수가 단어 일반적인 매개 변수 뷰에 전달되기 전에, 뷰는 수신 된 매개 변수를 사용하여받은 인수 또는 매개 변수, 경로 전송 항상 기능 URL URL을 통해 전달 된 매개 변수를 작동 할 수 있습니다.
urls.py
urlpatterns = 패스 (r'pathtest1 / <INT : url_args> 'pathtest.views.CBV1.as_view () {'사람 ''O-K '})] #에向의 views.py传递{'보낸 사람 : '승인'}
views.py
Cbv1 클래스 (보기) : DEF (자체, 요청, * 인수, ** kwargs로)를 GET : #는 수신 된 인수가 DEF GET 사용 (이후 운영, 자기, 요청, 인수 *, ** kwargs로) : 파라 = [] kwargs로 IF : kwargs.items의 V에 대한 K () 인쇄 (K '', V) para.append (V) HttpResponse에를 반환 (. '<의 H1> CBV2 {} <중 / H1>'형식 (파라)) # 액세스 : HTTP : //127.0.0.1 : 8000 / pathtest1 / 0010 # 페이지가 표시 CBV2 [ 'O-K' , 10]
6 명 : 정의되면 사용 {% URL을 '이름 기준값'%}, URL은 URL의 현 세대를 지칭한다.
HTML 템플릿보기 {% URL이 '이름 값'%}를 렌더링 할 때, 라우팅 urls.py 이름 값에 따라 해당 경로를 찾을 수,
일치 규칙에 대한 대안 경로 문자열 '이름 값'HTML 템플릿
urls.py
= urlpatterns는 [ 패스 (r'pathtest1은 / 'pathtest.views.CBV1.as_view는 ()), 순방향 경로 # http://127.0.0.1:8000/pathtest1/ 액세스 Cbv1 정의 된 경로 (r'pathtest2 / <INT : PAGE_NUM> 'pathtest.views.CBV2.as_view (), 이름 ='patht ') #에 반대하여 정의 이름 # 경로 (r'lllllllllll / <INT : PAGE_NUM>'pathtest.views.CBV2.as_view () # 명칭 이름이 일치하지 않는 영향을 반전 룰을 변경하여 정의) = 'patht를'이름 ]
views.py
역의 HttpResponse에의 django.shorsturc 양식을 가져 오기 클래스 CBV2 (보기) : DEF (자체, 요청의 PAGE_NUM, 인수 *, ** kwargs로) GET : route_path = 역 ( 'patht'인수의 =합니다 (PAGE_NUM)) # 역방향 변환 행사에 URL 주소, 이름 값 patht URL이의 값과 일치하도록 변환됩니다 #의 인수 : 몇과 같은 네 가지 (page_num1, page_num2, page_num3, page_num4), 몇 가지 쓰기, 주소에서 매개 변수의 수를 인쇄 (route_path ) # 인쇄 반환 HttpResponse에 ( '<H1> CBV2 ) # 형식 (PAGE_NUM {} </ H1> : <BR/> PAGE_NUM'.) 다른 반환 값에 대한 클릭 링크 따라 클래스 CBV1 (보기) : DEF GET (자체, 요청, * 인수, ** kwargs로) : 렌더링 (요청, 'pathtest.html')을 반환
HTML :
<body> 는 URL patht 경로 (123)의 이름을 정의하는 데 사용되는 이름 \\ 그러므로 세 링크 CBV2 전망이 수행 된 다음 값을 얻는 것이다 <a href="{% url'patht' 100 %}"> NUM <를 / A> <a href="{% URL'patht' 200 %}"> 마비 / A> <a href="{% URL'patht' 300 %}"> </a>을 한 접점 </ body>
결과 :
방문 : HTTP : //127.0.0.1 : 8000 / pathtest1 / HTML에있는 링크를 클릭하면, CBV2 실행됩니다 이름 값의 정의 때문이다.
/ pathtest2 / 100 : 어떤 링크를 클릭하고 route_path를 볼
7, 매칭 규칙 지정 경로.
네 일치 규칙, INT, STR, 슬러그, UUID, 경로가 기본 경로,
또한 일치 규칙의 단계를 정의 할 수 있습니다 : 클래스를 정의를, 사용 register_converter
등록, 사용.
urls.py
오기 register_reverter에서 경로 django.urls 오기 pathtest.views 클래스 NumLine : # 첫 번째 단계, 클래스의 정의 REGEX = '[- 0-9] +' DEF의 to_python (자기, 값) : 리턴 STR (값하는) 일 수 // 다음, 변환 처리의 종류 및 반환 DEF의 to_url (자기, 값) : 리턴 STR (값) // 전환의 유형을 수행 할 수 있고, 처리를 다시 반환 (A)로부터 제 2 단계의 변환에 등록 된 사용자 클래스 # 및 이름 numline의 register_reverter (numLine 'numline') 의 urlpatterns = 패스 (r'pathtest1 / 'pathtest.views.CBV1.as_view ()), 경로 (r'ppppppppp / <numline : DATAl> <numline : DATA2>' pathtest.views.CVB2.as_view (), 이름 = 'patht') numline의 # 사용 정의 된 집합 매칭 파라미터 ]
APP : pathtest views.py
django.shortcuts에서 가져 HttpResponse에, 역, 렌더링 django.views.generic 수입보기에서 클래스 CBV1 (보기) : : 데프 (자체 요청) 얻을 반환 렌더링 (요청, 'pathtest.html') 클래스 CBV2 (보기) : DEF (자기 요청, DATA1, DATA2) 얻을 : full_path는 = ( 'patht'의 인수 = (DATA1, DATA2)) 역방향 <BR/> PAGE_NUM : /> CBV2 <br {} (HttpResponse에 반환을 '<H1> 전체 경로 :. {}, {} </ H1> '형식 (full_path, DATA1, DATA2))
pathtest.html
<a href="{% url'patht''-0--' 1111 %}"> 수 </a>에 // 문자열 매개 변수는 따옴표해야 통과 <A HREF = "{% URL 'patht을 '-2344 2천2백22퍼센트} "> 수 </a>를 // 여기에 - 식별이 부정 되었기 때문에, 제공되지 않습니다 3323 3333 %}"> 번호 url'patht' <a의 href="{%을 </a>를
결과 : 액세스가 들어오는 경우에만 인식 - 0-9 다른 매개 변수 오류가 발생했습니다.
도 8은 경로 라우팅은 urls.py APP (두 경로)로 분배된다.
방법은 지정된 사용 django.urls에서 수입 등이 포함
형식 : 경로 (r'pathreg / ', (가) 포함 app.urls ('을 '('는 APP .APP 라우팅 파일 이름)))에 포함 '
프로젝트 : urls.py
django.urls 경로를 가져올에서 포함 urlparrents의 = 패스 (r'pathreg /) '를 pathtest.urls'(포함 ') ]
응용 프로그램 : urls.py
django.urls 경로를 가져올에서 포함 pathtest 오기 뷰에서 urlparrents의 = [ (R '패스'views.CBV1.as_view ()), 경로 (r'index / 'views.CBV2.as_view ()) ]
응용 프로그램 : views.py
django.shortcuts에서 HttpResponse에를 가져 django.views.generic 수입보기에서 클래스 CBV2 (보기) : 데프 (자체 요청) 얻을 : HttpResponse에를 반환 ( '<H1> 인덱스 페이지 </ H1>') 클래스 CBV1 (보기) : DEF (자체 요청) 얻을 : HttpResponse에를 반환 ( '<H1> 기본 페이지 <H1>')
결과 : HTTP : //127.0.0.1 : 8000 / pathreg / pathreg 일치하는 문서를 라우팅 URL의 프로젝트를 통해 파일을 라우팅 앱 URL에 배포, 전화 CBV1 디스플레이 기본 페이지
http://127.0.0.1:8000/pathreg/index, 인덱스 일치하는 파일을 라우팅 응용 프로그램의 URL에 분산 라우팅 된 URL pathreg을, 일치하는 파일의 프로젝트 후, CBV1 디스플레이 색인 페이지를 호출
9 re_path : 지원을 정기적으로 일치하는 다른 매개 변수의 경로와 동일
그리고 Django1.xx 버전은 동일한 URL을 제공합니다
경로 (R & LT ', views.CBV1.as_view ()) re_path (r'index을 $'views.CBV2.as_view을 ()) # http://127.0.0.1:8000/pathtest/1111111111111index re_path (R & LT ' 인덱스 ^ 'views.CBV2.as_view ()) # http://127.0.0.1:8000/pathtest/index1111111111111 re_path (r'index'views.CBV2.as_view ()), #는이만큼, 열쇠 연속 된 인덱스를 포함하는, 사용자가 DBV2를 찾을 re_path (R & LT를 '^ [A-ZA-는 Z [0-9A-ZA-_는 Z {5,9} $'views.CBV2.as_view는 ())는 # 1 문자로 시작에 대응 숫자 또는 문자 뒤에 짧은 밑줄 또는 6, 가장 긴 경로는 10 개 문자이다하는 # 참고 : 그 시작 {5,9} 옵션에 있지 않기 때문에, {5,9} 6,10 문자와 일치 # http://127.0.0.1:8000/pathtest/i_d111ex11 경기
10, CBV 사용자 정의 제출 방법을 추가합니다 :
, django.views.generic .View 클래스 찾기
, 방법의 http_method_names 기본 목록을 제공합니다
as_view 기능은 다수의 파라미터를 결정
마지막으로, dispach 방법을 반환
반사 수행 dispach 대응 함수 (getattr)
사용자 정의 프리젠 테이션 방법을 추가 :
목록 http_method_names, http_method_names.append () 죽 '에 이름을 추가의 1)에있어서
2) app.views.py의 기능 명을 정의
dispach있어서, 지정된 모든 동작으로 인해 증가시키는 방법을 다시 작성하여
파견 DEF (자체, 요청, * 인수, ** kwargs로) : ( '작업의 작업 전') 인쇄 OBJ = 슈퍼 (CBV, 자기) .dispatch (요청, * 인수, ** kwargs로) 인쇄 ( '수술 후 작동 코드 ') 반환 OBJ