django外呼叫url Django之url對映

2021-10-12 14:04:39 字數 2656 閱讀 1013

url對映的作用

根據django的mtv模式,url的對映是根據使用者輸入或傳送而來的url路徑,來進行區分去執行相應的view函式來響應使用者的操作。

url對映的方式

django專案的建立後,會自動建立和你專案名稱相同的全域性檔案包,urls.py就在其中。

urlpatterns = [

path('admin/', admin.site.urls),

from blog import views

這樣就可以在urlpatterns中新增自己的對映條件,例如

from blog import views

urlpatterns = [

path('admin/', admin.site.urls),

path('blog/',views.blog)

寫相應的檢視函式

這樣在瀏覽器中輸入127.0.0.1:8000/blog/就能看到返回的welcome了。

url對映的函式

urlpatterns中可以使用兩種函式,path()用來字串路由,re_path()處理正則式路由。

path函式

必須有的引數

path()中有兩個必須填的引數,乙個是路徑字串,乙個是所呼叫的函式。

就如上邊的例子

path('blog/',views.blog)

這個只匹配在你的路徑後加上blog/的情況,然後執行views下的blog函式,表示靜態,精確的對映。

路徑字串除了填精確的路徑外,還可以填,可以在匹配 url的同時傳遞引數,而且匹配的範圍更加龐大。例如:

path('/year/',views.year)

可以匹配」任意整型數字/year/「,並且匹配到的整型數字還會以變數名為year的形式作為引數傳遞給views.year函式。這裡注意:views.year函式的引數名必須和你在url對映時起的名字相同,即「year」。

這裡的資料型別還有其他幾種:

資料型別說明

str匹配除分隔符(/)外的非空字元

int匹配0和正整數

slug

匹配字母、數字、橫槓、下劃線組成的字串,str的子集

uuid

匹配格式化的uuid,如075194d3-6885-417e-a8a8-6c931e272f00

path

匹配任何非空字串,包括路徑分隔符,是全集

非必要引數

path中的非必要引數也有兩個,乙個是用來給檢視函式傳遞的引數,乙個是別名。

用來給檢視函式傳遞的引數除了上述直接在url中,還可以手動指定填入path()中,以字典的形式填入,因為這裡的引數型別為**kwargs。而檢視函式中的引數同樣必須和字典中的鍵名相同。例如:

如果url引數和字典型別引數都使用了,並且名稱相同,如:

path('/year/',views.year,)

那麼在檢視函式中只能新增乙個year引數,並且在字典中的year的資料20會覆蓋掉url中的資料。

最後乙個引數是別名,例如:

path('blog/',views.blog,name="abc")

在html中,form表單提交的路徑就可以使用abc來代替/blog/,具體方式為

這種方式只允許在前端中使用,在位址列中通過使用別名的方式訪問是不起作用的。

re_path()函式

re_path()函式和path()函式類似,但它是使用正規表示式的模式來代替字串模式進行匹配,只要符合正則式的模式就可以匹配成功。

re_path("^\d+/day/",views.day)

這裡也可以通過url來傳遞引數,使用的是正則式分組的方式

re_path("^(\d+)/day/",views.day)

沒有給分組起名字的模式,即為無命名引數,分組所匹配的資料會自動當引數傳遞給檢視函式,但是檢視函式的形參必須要多寫乙個引數,名字任意。

re_path("^(?p\d+)/day/",views.day)

上面這種為命名引數,檢視函式必須以其名字作為引數名,同樣,如果手動新增的引數與其名稱相同,那麼手動新增的引數資料會將正則式中的覆蓋。

路由分發

在全域性urls中新增

path('blog/',include('blog.urls'))

在blog資料夾下建立urls.py檔案,在檔案中寫入

from django.urls import path,re_path

from blog import views

urlpatterns = [

path("login/",views.login)

那麼在位址列中輸入/blog/login,就會先由全域性urls分發到blog下的urls,再進行相應的檢視函式對映。

最後有一點要注意,所有的url對映都是從上到下按順序匹配,遇到第乙個匹配成功後就不在往下進行了。

程式外呼叫系統發簡訊

一行 發簡訊 這個相當與 切到 系統傳送簡訊模組而非直接在程式裡 程式裡面傳送 匯入messageui.framework 並設定 mfmessagecomposeviewcontrollerdelegate void messagecomposeviewcontroller mfmessageco...

celery實測之Django呼叫

1 新建並配置乙個celery檔案,需同setting在同一級。from celery import celery from django.conf import settings import os 為celery設定環境變數 os.environ.setdefault django settin...

指令碼單獨呼叫django模組

需求場景 在寫django的時候,有時候會遇到我們需要使用django中的模型 model 但是指令碼 是單獨執行的,並不是和django服務一起執行的,這時候需要在檔案的開始部分做如下設定 import os,sys cmdb path os.path.dirname os.path.dirnam...