딩고의 일상. - 2.
딩고의 일상. - 2.
라우팅 레이어
우리는 이전에 이미 루트층을 접촉한 적이 있지만, 단지 우리가 그의 이름을 모를 수도 있다. 실제로 Django에서 루트층은 urls를 가리킨다.py 이 파일.
루트의 개념은 무엇입니까? 우리가 평소에 가장 많이 접하는 루트와 관련된 것은 아마도 공유기일 것입니다. 그러면 공유기는 무엇입니까?
공유기는 여러 개의 네트워크를 연결하는 하드웨어 설비로 네트워크 간에 네트워크 스위치 역할을 하여 서로 다른 네트워크의 네트워크 간의 데이터 패키지를 처리하고 전송할 수 있다.
Django 안의 루트층은 이 작용과 약간 유사하다. 루트는 요청 주소와 보기 함수의 映射 관계이다. 만약에 우리가 한 사이트를 한 권의 책에 비유한다면 루트는 이 책의 목록이고 색인이라고 할 수 있다.
urls.py에 구성된 템플릿은 다음과 같습니다.
# urls.py
from django.conf.urls import url # url, Django 1.x url, 2.x path, ,2.x re_path url , path , path
urlpatterns = [
url(regex, view, kwargs=None, name=None), # url
]
# regex: , url ,
# url :http://127.0.0.1:8001/index/, index/
# view: ,
# :
urlpatterns = [
url(r'^admin/', admin.site.urls), #
url(r'test/$', views.test), # ,
url(r'^$', views.home), # , ,
# url(r'test/[0-9]{4}', views.test), # , ,
url(r'', views.errors) # 404 , , , , url
]
# :
1. url
2. , ,
3. ^ ,$ ,
또 하나의 작은 문제가 있다. 사실 때때로 우리가 사이트 주소를 입력할 때 맨 뒤에 있는 왼쪽 밑줄을 넣지 않았는데 웹 페이지가 성공적으로 바뀌었다. 이것은 Django에 이 설정이 있기 때문이다.settings.py 파일에서 마지막으로 우리는 하나를 정의할 수 있다
APPEND_SLASH = False
# Django True, , ,
예를 들어, 우리는 이 옵션을 설정한 후, 아래의 주소를 입력한다.
http://127.0.0.1:8000/index
현재, 전제는 urls를 설정하고views 함수를 index라고 썼다는 것입니다.웹 페이지 F12 검사 안의 네트워크 탭에서 두 개의 요청을 볼 수 있습니다. 하나는 index, 하나는 index/
한편, index의 요청 상태 코드는 301, 즉 방향을 바꾸는 것이다. index/의 상태 코드는 200이다. 이것이야말로 우리가 마지막으로 본 웹 페이지의 결과이다.
명분조와 무명조.
먼저, 그룹을 나누는 목적은 같은 특질을 가진 사물을 하나로 나누어 찾기와 관리에 편리하도록 하는 것이다. Django에서도 마찬가지다. 우리는 비슷한 내용이나 격식의 웹 페이지를 한 그룹으로 나누면 웹 페이지를 더욱 편리하게 관리할 수 있다.
그러면 그룹을 구성한 후에 우리는 어떻게 이런 웹 페이지를 호출해야 합니까? 예를 들어 우리는
http://127.0.0.1:8000/index/
라는 접미사 아래에 100개의 웹 페이지를 만들었습니다. http://127.0.0.1:8000/index/1
부터 http://127.0.0.1:8000/index/100
까지. 그러면 우리는urls에 있어야 합니까?py에 100개의 문장을 쓴다?아니, 이때 우리가 조를 나누는 중요성이 바로 나타났다.조를 나누면 이 문제를 완벽하게 해결할 수 있다. 다음은 두 가지 조를 나누는 방식, 무명 조와 유명 조입니다.
이름 없는 그룹
#
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),# ,
# :index/ /, , , , views.py , index(request,*args)
url(r'^index/(\d+)/$',views.index),
]
# , , http://127.0.0.1:8000/index/, , index ,
유명 그룹
#
#
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),# ,
# , , , , , views.py , index(request,**kwargs)
url(r'^index/(?P\d+)/$',views.index),# , year
]
여기서 강조해야 할 것은 유명 그룹과 무명 그룹은 혼합해서 사용할 수 없다는 것이다. 즉, 같은 URL에 여러 개의 유명 그룹이 있을 수도 있고 여러 개의 무명 그룹이 있을 수도 있지만 유명 그룹과 무명 그룹을 동시에 포함할 수는 없다.
역해석
역해석을 하기 전에 우리는 해석의 개념을 알아야 한다. Django에서 해석의 개념은 우리가 백엔드와 전단을 잘 쓰고 실행하면 전단이 자신의 코드를 번역하고 다른 사람이 주소를 입력하면 자동으로 이 인터페이스로 넘어간다. 아마도 해석의 개념일 것이다. 해석의 관건은 정확한 경로를 통해 대상이나 사이트를 얻는 데 있다.
그러면 역해석의 개념도 나온다. 역해석은 우리가 하나의 별명, 또는 한 대상에서 그 경로를 얻는 과정인데 이를 역해석이라고 한다.역방향 해석은 Django에서 가장 큰 편리함은 우리가 URL에 별명을 붙인 다음에 이 별명을 통해 경로를 얻는 것이다. 이렇게 하면 우리의 URL 접두사가 어떻게 바뀌든 나머지 코드는 이에 따라 변하지 않는다.
그룹 없는 역해석
우선, 역해석의 전제는 우리가urls에 있어야 한다는 것이다.py의 URL에서name 속성 정의
# app01_edit
# urls.py
url(r'^edit_user/', views.edit_user, name='app01_edit')
# , html
# edit_uset.html
111
# , , views.py
from django.shortcuts import reverse
url = reverse('app01_edit')
# ,
무명 그룹의 역해석
#
#
# urls.py
url(r'^edit_user/(\d+)/', views.edit_user, name='app01_edit')
# , html
# edit_uset.html
111
# user_obj.pk
# , , views.py
from django.shortcuts import reverse
url = reverse('app01_edit',args=(1,))
유명한 그룹의 역해석
#
# urls.py
url(r'^edit_user/(?P\d+)/', views.edit_user, name='app01_edit')
# , html
# edit_uset.html
111
# , , views.py
from django.shortcuts import reverse
url = reverse('app01_edit',kwargs = {'key':1})
라우팅 배포
프로젝트가 점점 커지면서 우리의 앱 수량도 증가할 것이다. 이때 모든 URL이 프로젝트 메인 디렉터리에 있는 URL에 쓰이면 이 URL은.py는 매우 방대할 뿐만 아니라 작업 총량도 매우 크고 관리하기 불편하며 구조도 뚜렷하지 않다. 그래서 우리는 루트 분배라는 개념을 제기했다. 즉, 모든 앱은 자신의urls가 있다는 것이다.py, 자신의static,templates 폴더가 있습니다. 이렇게 하면 모든 앱이 자신의 기능을 실현할 수 있고 다른 앱에 전혀 영향을 주지 않기 때문에 저희 프로젝트의 urls.py는 중계소로서 요청을 다른 앱에 나누어 주고 앱의 urls만 책임지면 된다.py 완성 루트와 보기 함수의 대응 관계.
여기 저희가 아주 간단한 집행 방법이 있어요.
# /urls.py
urlpatterns = [
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
]
# app01 app01, app02 app02
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.