장고 프레임 워크 2 : urls.py 라우팅 설정

수신 된 요구는 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




추천

출처blog.51cto.com/yishi/2436453