Django 라우팅 레이어 상세 정보

Django의 라우팅 역할
URL 설정(URLconf)은 Django가 지탱하는 사이트의 디렉터리입니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 매핑 표이다.클라이언트가 보낸 URL에 대해 어떤 논리 코드를 호출해야 하는지 Django에게 알려주는 것이다
일반적인 예:
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

라우팅의 기본 사용
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
	url(     , views    ,  ,  ),
]
  • 정규 표현식: 정규 표현식 문자열
  • views 보기 함수: 보통 보기 함수나 보기 함수 경로를 지정하는 문자열
  • 매개 변수: 보기 함수에 전달할 기본 매개 변수 (사전 형식)
  • 별명: 선택할 수 있는name 매개 변수
  • 참고:
  • URL에서 값을 캡처하려면 그 주위에 괄호 쌍만 놓으면 됩니다.
  • 각 URL에 백슬래시가 있으므로 리드 백슬래시를 추가할 필요가 없습니다.예를 들어 ^articles이지 ^/articles가 아니다.
  • 모든 정규 표현식 앞의'r'는 선택할 수 있지만 덧붙이는 것을 권장합니다.이것은 파이톤에게 이 문자열이 '원시적' 이라는 것을 알려 준다.
  • urlpatterns의 요소는 쓰기 순서에 따라 위에서 아래로 정규 표현식을 하나씩 매칭하고 매칭에 성공하면 계속하지 않습니다
  • APPEND_SLASH
    Django settings.py 구성 파일에는 기본적으로 APPEND 가 없습니다.SLASH 매개 변수이지만 Django 기본값은 APPENDSLASH = True. 그 역할은 바로 자동으로 사이트 주소의 끝에'/'를 붙이는 것이다.
    그 효과는 다음과 같다.
    우리는 urls를 정의했다.py:
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
    	url(r'^blog/$', views.blog),
    ]
    

    방문http://www.example.com/blog기본적으로 웹 주소를 자동으로http://www.example/com/blog/.
    만약 settings에서.py에서 APPEND 설정SLASH=False, 지금 다시 요청http://www.example.com/blog페이지를 찾을 수 없음을 알리는 메시지가 나타납니다.
    위정태
    위정태를 사용하는 것은 검색엔진 최적화(SEO) 수록을 편리하게 하기 위해서이다
    SEO(Search Engine Optimization): 검색 엔진 최적화일종의 방식이다. 검색 엔진의 규칙을 이용하여 사이트가 관련 검색 엔진 내의 자연 순위를 높인다.
    검색엔진 최적화 1. 내부 최적화 (1) META 라벨 최적화: 예를 들어 TITLE,KEYWORDS,DESCRIPTION 등의 최적화.(2) 내부 링크의 최적화는 관련성 링크(Tag 라벨), 닻 텍스트 링크, 각 네비게이션 링크와 이미지 링크를 포함한다.(3) 사이트 내용 업데이트: 매일 사이트 내의 업데이트(주로 글의 업데이트 등)를 유지한다.2. 외부 최적화 (1) 외부 링크 유형: 우정 링크, 블로그, 포럼, B2B, 뉴스, 분류 정보, 카페, 알음, 백과사전, 사이트, 관련 정보망 등 링크의 다양성을 최대한 유지한다.(2) 외부 체인 운영: 매일 일정 수량의 외부 링크를 추가하여 키워드의 순위를 안정적으로 향상시킨다.(3) 외부 체인 선택: 당신의 사이트와 관련성이 높고 전체적인 질이 좋은 사이트와 우정 링크를 교환하여 키워드 순위를 공고히 한다.
    위정태는 상대적으로 진실한 정태로 말하자면 보통 우리는 검색엔진의 우호적인 면을 강화하기 위해 글 내용을 정적 페이지로 만들지만 어떤 친구들은 실시간으로 정보를 표시하기 위해 한다.아니면 동적 스크립트를 활용해서 문제를 해결하고 싶거나.정적 방식으로 사이트 내용을 전시할 수 없다.하지만 이는 검색엔진에 대한 우호적인 면을 잃게 됐다.어떻게 둘 사이에서 중간 방법을 찾느냐에 따라 위정태 기술이 생겼다.html 같은 정적 페이지 형식으로 보여졌지만 사실은 ASP 같은 동적 스크립트로 처리되었다.
  • URL 구조와 페이지 이름을 보면 위정적, 정적 페이지는 같다.위정적 페이지 접미사는 htmlhtm 또는 디렉터리 형식
  • 위정태는 URL의 표현 형식만 바뀌었을 뿐 실제로는 동적 페이지
  • 정적 페이지는 서버 자원을 절약할 수 있지만 위정적 페이지는 서버 자원의 소모를 증가시킨다
  • 결론적으로 SEO의 경우 위정태와 정적 페이지의 기능은 같지만 위정태는 본질적으로 동적 페이지이기 때문에 자원을 소모하는 것은 동적 페이지와 같다. 그리고 Rewrite 서버는 추가 자원을 소모해야 하기 때문이다.
    라우팅된 그룹
    이름 없는 그룹
    #    
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
    	url(r'^blog/$', views.blog),
    	url(r'^articles/2003/$', views.special_case_2003),
        url(r'^articles/([0-9]{4})/$', views.year_archive),
    ]
    
    #    
    def year_archive(request, year):
    	'''
    	year:             
    	'''
    	return HttpResponse('   %s ' % year)
    

    위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로 뷰에 전달하는 간단한 정규 표현식 그룹(괄호를 통해)을 사용합니다.더 높은 사용법에서는 명명된 정규 표현식 그룹을 사용하여 URL의 값을 포착하고 키워드 매개 변수로 보기에 전달할 수 있습니다.
    무명 그룹에서 몇 개의 값을 나누면 보기 함수는 몇 개의 값을 받아들여야 한다(위치 매개 변수 형식으로 전송된)
    유명 그룹
    Python 정규 표현식에서 정규 표현식 그룹을 명명하는 문법은 (? Ppattern) 이고,name은 그룹의 이름이며,pattern은 일치하는 모드입니다.
    명분에 따라 그룹을 나누면 위의 예는 이렇게 써야 한다.
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
    	url(r'^blog/$', views.blog),
    	url(r'^articles/2003/$', views.special_case_2003),
        url(r'^articles/(?P[0-9]{4})/$', views.year_archive),
    ]
    

    명분조와 무명분조는 사용에 있어서 큰 차이가 없다. 단지 명분조에 대응하는 보기 함수의 형삼 이름은 반드시 분조명과 일치해야 한다. 즉, 명분조는 분출된 파라미터를 키워드 파라미터에 따라 보기 함수에 전달하기 때문에 반드시 이름의 일치를 유지해야 한다.
    실제 응용에서, 이것은 URLconf가 더욱 명확하고 매개 변수의 순서 문제를 일으키기 쉽지 않다는 것을 의미한다. 보기 함수 정의에서 매개 변수의 순서를 다시 설정할 수 있다.물론 이런 장점들은 간결함을 대가로 한다.
    주의: 유명 그룹과 무명 그룹은 혼합해서 사용할 수 없습니다
    라우팅 배포
    하나의 Django 프로젝트에 여러 개의 app가 있을 때 서로 다른 app의 보기 층에 이름이 같은 보기 함수가 있을 수 있습니다. 이름 충돌을 피하기 위해 우리는 루트를 나누어 주는 방식으로 전체 루트에서 나누어 주고 모든 app가 자신의 내부에서 루트를 설정하도록 합니다.
    #   include
    from django.conf.urls import url, include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        #     :  app01     include  ,  app01     urls           
        url(r'^app01/', include('app01.urls')),
    	url(r'^app02/', include('app02.urls'))
    ]
    
    # app01  urls    
    from app01 import views
    
    urlpatterns = [
    	url(r'^test/', views.test),
    ]
    

    브라우저가 app01/test/를 입력하면 app01에서views의test 실행에 응답합니다
    역해석(이해)
    보기 함수에서 방향을 바꾼 주소가 죽은 경우 url 주소가 변경될 때 모든 url를 수정해야 하기 때문에 비교적 번거롭다. 우리는 역해석을 통해 url의 주소를 동적으로 얻을 수 있다.
    #    
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
    	url(r'^admin/', admin.site.urls),
    	url(r'^test/$', views.test, name='test')
    ]
    
    #    
    from django.shortcuts import reverse
    
    def re_url():
    	url=reverse('test(url     )')
    	#       (         )
    	url=reverse('test(url     )',args=[],kwargs={})
    	return redirect(url)
    
    {# django    #}
    {% url 'url     '%}
    #       (         )
    {% url 'url     '   1   2 ...   n %}
    

    이렇게 하면 라우팅 레이어의 라우트가 변경된 경우에도 보기 레이어나 템플릿 레이어의 라우팅 주소를 수정하지 않아도 됩니다.
    이름 공간
    라우팅 배포 시 이름 공간을 지정할 수 있습니다.
    #   include
    from django.conf.urls import url, include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^app01/', include('app01.urls', namespace='app01')),
    	url(r'^app02/', include('app02.urls', namespace='app02'))
    ]
    

    명칭 공간은 보기 층에서 역해석할 수 있습니다. 개인은 명칭 공간을 추천하지 않습니다.

    좋은 웹페이지 즐겨찾기