網(wǎng)站404怎么解決seo服務(wù)哪家好
一.前言
前面我們說了django的安裝于基礎(chǔ)配置,基礎(chǔ)知識點(diǎn)我就細(xì)分下來,每天和大家講一點(diǎn),今天就要和大家說django的基礎(chǔ)知識點(diǎn)了,我們今天先來講路由,內(nèi)容不多,希望大家記住
二.傳統(tǒng)路由
路由就是前面一個路徑后面寫上一個函數(shù)對應(yīng),而傳統(tǒng)路由有兩種寫法,一種是直接給他寫死,第二種動態(tài)的就是中間加上<類型:參數(shù)名>,這種在對應(yīng)的視圖函數(shù)里面參數(shù)也要加上這個名字,這樣我們就可以獲取這個動態(tài)的參數(shù),可以看到視圖函數(shù)第一個參數(shù)是request,這個參數(shù)必須得有,名字習(xí)慣叫做這個,這個就是所有的請求信息,如果我們要拿到這個get請求后面的載荷就可以通過request.GET取到
如果我們訪問127.0.0.1:8000/home/?page=1
例如這個我們就可以拿到這個page的值,如果沒有結(jié)果就是None
常見的類型
int,整數(shù)
str,字符串 /
slug,字母+數(shù)字+下滑線+-
uuid,uuid格式
path,路徑,可以包含 /
三.正則表達(dá)式路由?
-
在django1版本用的多。
-
在django2+版本用的少
大家肯定能想到為什么為什么用的少了,這是因?yàn)閐jango2+以后支持<int:nid>傳遞參數(shù),但是我們還是得要了解正則的
我們正則路由要用re_path,這里面我們就直接寫正則的符號,我們寫了多少個符號對應(yīng)的就要在視圖函數(shù)里面加上多少個參數(shù)(request參數(shù)除外),當(dāng)然如果我們想指定名字可以在正則里面寫上?P<參數(shù)名字>正則內(nèi)容,這樣我們參數(shù)里面就要寫上同名的參數(shù)
四.路由分發(fā)?
我們可以想一下,如果我們有200個api,每個api前面路由都有相同的部分,我們這么分發(fā)就會很亂,后期也特別不好維護(hù),那我們就可以使用路由分發(fā)
4.1 include分發(fā)
我們可以先在對應(yīng)的app里面創(chuàng)建一個urls.py的文件
?
我們在主路由里面寫上user,然后include里面寫上分路由的文件路徑,分路由再寫上后面的后面的路徑加上對應(yīng)的函數(shù),這樣就可以實(shí)現(xiàn)分發(fā)了,我們訪問http://127.0.0.1:8000/user/show/就可以訪問到對應(yīng)的用戶展示頁面了
我們通常用include分發(fā)和app進(jìn)行分塊
4.2 手動分發(fā)
path('user/', ([
? ? ? ? ? ? ? ? ? ?path('add/', views.login),
? ? ? ? ? ? ? ? ? ?path('delete/', views.login), ? # /user/delete/
? ? ? ? ? ? ? ? ? ?path('edit/', views.login),
? ? ? ? ? ? ? ? ? ?path('show/', views.login),
? ? ? ? ? ? ? ?], None, None)),?
我們也可以這樣進(jìn)行手動分發(fā),純粹為了提取功能的url,后面的兩個none我們讀include源碼就知道了,分別代表app_name和namespace,我們目前還用不上,一會用上了會說的
路由分發(fā)的本質(zhì):
URL對應(yīng)函數(shù)
path('user/add/', views.login),
URL對應(yīng)元組
path('user/add/', ? ?(元素,appname元素,namespance元素) ? ?),
實(shí)例?
path('user/add/', ? ?include("apps.api.urls") ? ?),
path('user/add/', ? ? ([],None,None) ? ? ),?
五.name?
name就是給一個路由起個名字 + 根據(jù)名字反向生成URL。 ?
我們后續(xù)一般會通過這個name來獲得獲取用戶url來做重定向或者用戶權(quán)限之類的
六.namespace
?我們前面也提到了namespace,這個就是用來輔助name的,這個在include中才用得到,給大家舉個例子就知道了,假如我們有很多個app,難免會遇到重名的name,那如果我們在include里面設(shè)置不同的namespace,是不是就能通過這個namespace進(jìn)行區(qū)分了
?
我們可以通過nanespace:name找到對應(yīng)的具體的url,但是這里需要注意的是,當(dāng)我們設(shè)置了namespace,就必須得設(shè)置appname
如果我們手動分發(fā),這兩個就不能是None了,第三個是namespace,第二個是app_name,通常讓這兩個同名
?七.總結(jié)
我們今天說了路由,發(fā)現(xiàn)還是很簡單的,主要是記憶,講了路由的分發(fā)啥啥啥的,非常簡單
八.補(bǔ)充
今天我要在這里補(bǔ)充一個知識點(diǎn)就是為啥我們習(xí)慣在路由末尾都加上一個/,要是用了其他框架大家肯定都沒這個習(xí)慣,但是django我們要在這里加上/,這是為什么呢?
這是因?yàn)閐jango的配置里面默認(rèn)APPEND_SLASH = True
如果我們在路由后面加上/,但是瀏覽器里面我們沒有加上/,由于這個配置的存在,我們就會重定向到由/的這個url,這個配置我們也可以去更改,但是這么方便我們肯定是不會去更改的,如果我們路由里面不加上這個/那么只有當(dāng)瀏覽器里面不帶/才會有用,相當(dāng)于這個配置沒有用,所以我們都習(xí)慣加上這個/
我們下一期將和大家講django中的視圖,希望大家的點(diǎn)贊關(guān)注加收藏