Django路由匹配

2022-03-11 07:38:26 字數 1697 閱讀 3982

先丟擲乙個問題

return httpresponse('testadd')當我們訪問test的時候,返回的頁面內容是 test 沒有問題。

但是當我們訪問testadd 的時候,返回的頁面內容居然也是 test 。

這是因為 urls 裡面不是單純的匹配,而是正則匹配。

並且在這裡面搜尋順序是自上而下,一旦找到滿足的,後面的就不再執行了,我們輸入的 test毫無疑問匹配到了 urls 裡的 test ,但是,我們的 testadd 也滿足 test 的正則表達,所以也走了這一條,因此我們兩次請求的頁面都是同乙個。

為此,需要解決這個問題,我們要在他的前面加上斜桿

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'test/', views.test),

url(r'testadd/', views.testadd),

這就解決了這個問題。

乙個非常重點:我們在瀏覽器裡面輸入連線的時候,字尾比如說是 test,沒有輸入斜桿,最後發現回車之後確實訪問到了我們要的介面,而且url後面自動加了乙個「/」 。這不是瀏覽器給我們加的,是django給我們加的,首先沒有加上斜桿的時候,已經在 urls 裡面搜尋匹配了一次,然後django發現沒有匹配上的,於是他就給我們加了個斜桿,然後才匹配上的,所以這前後一共進行了兩次http請求,可以在瀏覽器的 f12 裡面的network裡面看,確實是有兩次請求,一次成功,狀態碼是200,一次是失敗狀態碼是302,也就是django給我們自動重定向了,在後面加了個「/「。

如果想要取消django自動加斜桿的這個機制,可以在 settings 裡面修改,在最後面加上乙個

現在又有新的問題了,我在傳送乙個這樣的請求 「127.0.0.1:8001/asdfasdfatest/」,沒想到結果居然成功了,這是因為正則匹配嘛,裡頭不還是有個test,依然能夠匹配上的,可以推斷的是,我們在test/後面亂加東西,也不會影響,依然能夠訪問到,這顯然不是我們要的結果。

所以,在urls 裡面, 前面加尖括號,後面加美元符,就能夠解決了,也就是要以這個開頭,以這個結尾。

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^test/$', views.test),

url(r'^testadd/$', views.testadd),

完美解決了。

url(r'^$', views.home),  # 首頁

url(r'',views.errors) # 404頁面

404頁面,也是尾頁,不推薦使用,因為在我們我們第一次如果沒有加上斜桿去請求 test之類的,會先走一次,這就直接進了404了,都走不了第二次,所以不推薦使用。

Django新手上路 路由匹配

1.1 定義url即統一資源定位符,網路資源的位址,包含對應檔案的位置和瀏覽器對該資源的處理方式。1.2 格式schema host port path query string anchor 栗子 2.1 urls.py作用from import views from django.urls im...

django路由 分解路徑 正則匹配路徑

from django.urls import include 公共部分 部分發 path admin admin.site.urls 例 根目錄訪問index頁面re path r views.index 路由配置 路徑 檢視函式 哪個路徑,交給哪個函式處理 from django.urls im...

django 2 x路由系統匹配path

django2.x路由系統已經替換成下面的寫法 官方文件 url的路由表示用path和re path代替,模組的匯入由django1.x版本的 from django.conf.urls import url,include變成現在的django2.x中的 from django.urls impo...