WeChat 애플릿 개발로가는 길 (8) Django 라우팅

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")))

추천

출처blog.csdn.net/xulei1132562/article/details/113615811