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...