Django 프레임 베이스의 라우팅 상세 정보
13186 단어 DjangoDjango 라우팅
**본질은 URL과 이 URL이 호출할 보기 함수 사이의 매핑입니다. Django가 클라이언트에게 보낸 URL에서 어떤 논리 코드를 호출해야 하는지 알려주기 위해서입니다.**
라우팅의 기본 구성:
from django.conf.urls import url
# urlpatterns url() Python
urlpatterns = [
# url(regex, view, kwargs=None, name=None),
url( , , , ),
]
"""
url() :
:
views : ,
: ( )
: name ,
"""
url 함수의 첫 번째 인자를 자세히 설명하기:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
참고 사항:
라우팅 정규 표현식의 끝에'/'설명을 추가할지 여부:
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/$', views.index), # '/'
url(r'^test$', views.test), # '/'
]
예를 들면 다음과 같습니다.
테스트 1: 액세스http://127.0.0.1:8000/index또는http://127.0.0.1:8000/index/결과는 모두 성공적이었다. 왜냐하면 방문했을 때http://127.0.0.1:8000/index시 자동으로 301 리디렉션http://127.0.0.1:8000/index/
테스트 2: 액세스http://127.0.0.1:8000/test성공한 것이고,http://127.0.0.1:8000/test/실패할 거예요.
그렇다면 도대체 무슨 이유일까?어떻게 이럴 수가 있지?
만약 루트의 끝에 '/' 이 있지만 요청한 URL의 끝에 '/' 가 붙지 않았을 때 URL에 꼬리 빗장을 추가할 지 여부입니다. False는 APPEND 를 추가하지 않습니다.SLASH=True # Django의 글로벌settings의 기본 설정
테스트 1:http://127.0.0.1:8000/indexWrite Access가 성공한 이유는 APPEND 때문입니다.SLASH는 기본적으로 True로 설정되어 있지만, 이 설정을False로 바꾸면 r '^index/$' 루트에 접근할 때 끝에 '/' 를 붙여야 합니다.
총괄: 이 테스트는 루트를 정의할 때 마지막에'/'를 더하면 루트가 더욱 유연해진다는 것을 설명할 수 있다.
이름이 없는 정규 표현식 그룹:
#
#
url(r'^test/(\d+)/',views.test), #
#
def test(request, num): # num ,
print(num)
return HttpResponse('test')
명명된 정규 표현식 그룹:
Python의 정규 표현식에서 정규 표현식 그룹을 나누는 문법은 (? Ppattern) 이고,name은 그룹의 이름이며,pattern은 일치하는 모드입니다
#
#
url(r'^test/(?P\d+)/' ,views.test), #
#
def test(request, year): #
print(year)
return HttpResponse('test')
다음은 이름이 있는 정규 표현식 그룹을 사용하여 다시 쓰는 코드입니다.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P[0-9]{4})/$' , views.year_archive),
url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$' , views.month_archive),
url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$' , views.article_detail),
]
이것은 앞의 예시와 완전히 같고 단지 하나의 미세한 차이만 있다. 포획된 값은 위치 파라미터가 아니라 보기 함수에 키워드 파라미터로 전달된다.
실제 응용에서 이름이 있는 정규 표현식 그룹을 사용하면 매개 변수의 순서에 문제가 생기기 쉽고 오류가 발생하기 쉽다. 보기 함수 정의에서 매개 변수의 순서를 다시 설정할 수 있다.물론 이런 장점들은 간결함을 대가로 하는 것이다.일부 개발자들은 명명조의 문법이 추악하고 너무 지루하다는 것을 발견했다.
참고:
무명 정규 표현식 그룹과 유명 정규 표현식 그룹은 혼용할 수 없습니다!!!
#
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
#
url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$' , views.month_archive),
# ,
url(r'^articles/(?P[0-9]{4})/([0-9]{2})/$' , views.month_archive),
정규 표현식 그룹이 캡처한 매개변수는 문자열 유형입니다.
모든 포획된 매개 변수는 정규 표현식이 어떤 일치 방식을 사용하든지 간에 일반적인 Python 문자열로 보기에 전달됩니다.예를 들어,
url(r'^articles/(?P[0-9]{4})/$' , views.year_archive),
views에 전달합니다.year_archive () 의 year 매개 변수는 정수가 아닌 문자열입니다. [0-9] {4} 정수 문자열만 일치해도
보기 매개 변수의 기본값을 지정합니다.
보기 매개 변수의 기본값을 지정하는 데 편리한 팁을 드리겠습니다.URLconf 및 뷰의 예:
# URLconf
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/$', views.page),
url(r'^blog/page(?P[0-9]+)/$' , views.page),
]
# View (in blog/views.py)
def page(request, num="1"):
# ...
위의 예에서는 다음과 같이 설명합니다.
두 URL은 같은 보기views를 가리킨다.page
그러나 첫 번째 값은 URL에서 캡처되지 않습니다.첫 번째 일치가 성공하면 페이지 () 함수에서num는 기본 매개 변수 값 "1"을 사용합니다.
,`page()` `num` 。
우리의 보기 함수 중의 일반 매개 변수가 기본 매개 변수로 바뀐 후에 우리의 보기 함수를 더욱 유연하게 할 수 있다. 그러면 우리는 하나의 보기 함수를 여러 가지 경로로 유연하게 사용할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.