WeChat 애플릿 개발로가는 길 (8) Django 라우팅
간단히 말해 라우팅은 사용자가 요청한 URL 링크를 기반으로 해당 처리 프로그램을 결정하고 처리 결과를 반환하는 것입니다. 즉, URL과 Django 뷰가 매핑 관계를 설정합니다.
Django 라우팅은 urls.py에서 구성되며 urls.py의 각 구성은 해당 처리 방법에 해당합니다.
Django의 다른 버전에 대한 urls.py 구성은 약간 다릅니다 (블로거가 사용하는 버전 3.2.10) :
경로 : 일반 경로에 사용되며 일반 첫 번째 제한 기호를 직접 추가 할 필요가 없습니다. 맨 아래 레이어 추가되었다.
re_path : 일반 경로에 사용되며 일반의 첫 번째 제한 기호를 수동으로 추가해야합니다.
예 :
from django.urls import re_path # 用re_path 需要引入
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index), # 普通路径
re_path(r'^articles/([0-9]{4})/$', views.articles), # 正则路径
]
일반 경로로 그룹화
일반 경로의 이름없는 그룹화 이름없는 그룹화
는 위치, 일대일 대응으로 매개 변수를 전달합니다.
요청을 제외하고 뷰의 다른 매개 변수 수는 URL의 그룹 수와 동일해야합니다.
from django.conf.urls import url
from django.urls import re_path
from django.urls import path
from django.contrib import admin
from . import views,testdb,search,search2
urlpatterns = [
path('admin/', admin.site.urls),
re_path("^index/([0-9]{4})/$", views.index),
]
정규식을 스스로 가르치는 것이 가장 좋습니다.
from django.http import HttpResponse
from django.shortcuts import render
def runoob(request):
name ="中国矿业大学计算机学院许磊"
return render(request,"runoob.html",{
"name":name})
def index(request,year):
print(year) # 一个形参代表路径中一个分组的内容,按顺序匹配
return HttpResponse('中国矿业大学计算机学院许磊')
정규 경로의 명명 된 그룹
구문 : (? P <그룹 이름> 정규식)
명명 된 그룹은 위치 순서에 관계없이 키워드별로 매개 변수를 전달합니다.
요청을 제외하고보기의 다른 매개 변수 수는 URL의 그룹 수와 동일해야하며보기의 매개 변수 이름은 URL의 그룹 이름과 일치해야합니다.
일반 경로의 명명 된 그룹
라우팅 배포 (포함)에
문제가 있습니다. Django 프로젝트의 여러 앱 디렉토리가 하나의 URL을 공유하므로 혼란스럽고 불편한 유지 관리가 발생하기 쉽습니다.
해결 방법 : 경로 배포 (포함)를 사용하여 각 앱 디렉토리에 자체 URL이 있도록합니다.
단계:
1、在每个 app 目录里都创建一个 urls.py 文件。
2、在项目名称目录下的 urls 文件里,统一将路径分发给各个 app 目录。
각 앱 디렉토리에서 경로로 이동할 고유 urls.py 파일을 작성하십시오.
app01 디렉토리 :
from django.urls import path,re_path
from app01 import views # 从自己的 app 目录引入 views
urlpatterns = [
re_path(r'^login/(?P<m>[0-9]{2})/$', views.index, ),
]
app02 디렉토리 :
from django.urls import path,re_path
from app02 import views # 从自己的 app 目录引入views
urlpatterns = [
re_path("^xxx/(?P[0-9]{4})/$", views.xxx),
]
각 앱 디렉토리의 views.py 파일에 각보기 함수를 작성하십시오.
역 분석
기능이 증가함에 따라 라우팅 레이어의 URL이 변경됨에 따라 해당 뷰 레이어와 템플릿 레이어의 URL을 변경해야하므로 유지 관리가 매우 번거롭고 불편합니다.
이때 역 분석을 사용할 수 있으며, 라우팅 레이어 URL이 변경되면 수정 된 URL을 뷰 레이어와 템플릿 레이어에서 동적으로 해석 할 수있어 수정할 필요가 없습니다.
역 분석은 일반적으로 템플릿의 하이퍼 링크와 뷰의 리디렉션에 사용됩니다.
공통 경로
별칭 urls.py의 경로 , name = "route alias".
path("login1/", views.login, name="login")
views.py에서 django.urls에서 reverse를 도입하고 reverse ( "route alias")를 사용하여 해상도를 반대로합니다.
return redirect(reverse("login"))
템플릿 템플릿의 HTML 파일에서 역 분석을 위해 {% url "route alias"%}를 사용합니다.
<form action="{% url 'login' %}" method="post">
네임 스페이스
네임 스페이스 (영어 : 네임 스페이스)는 표시되는 식별자 범위입니다.
식별자는 여러 네임 스페이스에 정의 될 수 있으며 다른 네임 스페이스에서의 의미는 무관합니다.
모든 식별자는 새 네임 스페이스에 정의 될 수 있으며 반복 된 정의가 다른 네임 스페이스에 있기 때문에 반복되는 식별자와 충돌하지 않습니다.
문제가 있습니다 : 라우팅 별칭 이름에 범위가 없습니다. Django는 URL을 역방향으로 구문 분석 할 때 프로젝트의 전역 순서로 검색합니다. 첫 번째 라우팅 별칭 이름으로 지정된 URL을 찾으면 즉시 반환됩니다. . 동일한 라우팅 별칭 이름이 서로 다른 앱 디렉터리의 URL에 정의 된 경우 URL 역 구문 분석 오류가 발생할 수 있습니다.
솔루션 : 네임 스페이스를 사용하십시오.
공통 경로
정의 네임 스페이스 (include는 튜플) 의 형식은 다음과 같습니다.
include(("app名称:urls","app名称"))
path("app01/", include(("app01.urls","app01")))
path("app02/", include(("app02.urls","app02")))