Django 路由系統(tǒng)URLconf的使用
URLconf是什么?
URL配置(URLconf)就像Django 所支撐網(wǎng)站的目錄。它的本質(zhì)是URL與要為該URL調(diào)用的view函數(shù)之間的映射表;你就是以這種方式告訴Django,對于這個(gè)URL調(diào)用這段代碼,對于那個(gè)URL調(diào)用那段代碼。
urlpatterns = [ url(正則表達(dá)式, views視圖函數(shù),參數(shù),別名), re_path(正則表達(dá)式, views視圖函數(shù),參數(shù),別名), (在2.0以上版本中使用re_path), ]
參數(shù)說明:
正則表達(dá)式(regex):
regex是正則表達(dá)式的通用縮寫,它是一種匹配字符串或url地址的語法。Django拿著用戶請求的url地址,在urls.py文件中對urlpatterns列表中的每一項(xiàng)條目從頭開始進(jìn)行逐一對比,一旦遇到匹配項(xiàng),立即執(zhí)行該條目映射的視圖函數(shù)或二級路由,其后的條目將不再繼續(xù)匹配。因此,url路由的編寫順序至關(guān)重要!需要注意的是,regex不會去匹配GET或POST參數(shù)或域名,例如對于https://www.example.com/myapp/,regex只嘗試匹配myapp/。對于https://www.example.com/myapp/?page=3,regex也只嘗試匹配myapp/。如果你想深入研究正則表達(dá)式,可以讀一些相關(guān)的書籍或?qū)U摚窃贒jango的實(shí)踐中,你不需要多高深的正則表達(dá)式知識。
性能注釋:正則表達(dá)式會進(jìn)行預(yù)先編譯當(dāng)URLconf模塊加載的時(shí)候,因此它的匹配搜索速度非??欤阃ǔ8杏X不到。
view試圖函數(shù):
當(dāng)正則表達(dá)式匹配到某個(gè)條目時(shí),自動將封裝的HttpRequest對象作為第一個(gè)參數(shù),正則表達(dá)式“捕獲”到的值作為第二個(gè)參數(shù),傳遞給該條目指定的視圖。如果是簡單捕獲,那么捕獲值將作為一個(gè)位置參數(shù)進(jìn)行傳遞,如果是命名捕獲,那么將作為關(guān)鍵字參數(shù)進(jìn)行傳遞。
參數(shù)(kwargs):
任意數(shù)量的關(guān)鍵字參數(shù)可以作為一個(gè)字典傳遞給目標(biāo)視圖。
別名(name):
對你的URL進(jìn)行命名,可以讓你能夠在Django的任意處,尤其是模板內(nèi)顯式地引用它。相當(dāng)于給URL取了個(gè)全局變量名,避免了高額的維護(hù)成本。
示例:
例如服務(wù)器ip地址為127.0.0.1:8080
urlpatterns = [ path('admin/', admin.site.urls), re_path(r'^$', views.index), # 當(dāng)用戶訪問 http://127.0.0.1:8080 時(shí),后端用view.py中的index()函數(shù)處理。$表示結(jié)尾 re_path(r"^host/(\d+)",views.host), # URL示例:127.0.0.1:8080/host/100 \d代表數(shù)字;()表示無名分組且可以傳參,函數(shù)內(nèi)參數(shù)和次順序一一對應(yīng); # +表示重復(fù)一次或多次前面類型的字符。(\d+)表示不定位數(shù)的數(shù)字 re_path(r'^host_list/(\d{4})/(\d{2})$', views.host_list), # URL示例: 127.0.0.1:8080/host_list/2015/10 {4}表示重復(fù)四次前面的數(shù)字 url(r"^register",views.register,name="reg"), # 127.0.0.1:8080/register reg是URL別名,在模板中,例如<a href="{% url 'reg' %}" rel="external nofollow" ></a> re_path(r"^login",views.login,name="log"), # 127.0.0.1:8080/login re_path(r'^article/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})',views.article_month), # 127.0.0.1:8080/article/2015/09/10 ?P表示有名分組, # ()內(nèi)是分組,<>內(nèi)是組名函數(shù)內(nèi)參數(shù)名必須和組名相同,順序可以亂。 ]
路由分發(fā)
如果一個(gè)項(xiàng)目下有很多的app,那么在urls.py里面就要寫巨多的urls映射關(guān)系。這樣看起來很不靈活,而且雜亂無章。
我們可以根據(jù)不同的app來分類不同的url請求。
首先,在urls.py里寫入urls映射條目。注意要導(dǎo)入include方法
url(r'^app1/',include("app01.urls")), # 路由分發(fā),所有app1開頭的,全部轉(zhuǎn)移到app01下的urls.py里去處理
要在app01下創(chuàng)建一個(gè)urls.py文件,用來處理請求的URL,使之與views建立映射
urlpatterns = [ re_path(r'index/$', views.index), # 127.0.0.1:8080/app1/index ]
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)掃描局域網(wǎng)指定網(wǎng)段ip的方法
這篇文章主要介紹了python實(shí)現(xiàn)掃描局域網(wǎng)指定網(wǎng)段ip的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04python調(diào)用接口的4種方式代碼實(shí)例
這篇文章主要介紹了python調(diào)用接口的4種方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python實(shí)現(xiàn)一次性封裝多條sql語句(begin end)
這篇文章主要介紹了python實(shí)現(xiàn)一次性封裝多條sql語句(begin end),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06wxpython中利用線程防止假死的實(shí)現(xiàn)方法
上午抽空學(xué)習(xí)了一下在wxpython中啟用線程的方法,將GUI和功能的執(zhí)行分開,果然程序運(yùn)行起來杠杠滴。因?yàn)槲夷莻€(gè)軟件的代碼暫時(shí)不能公開,這里專門寫個(gè)小程序,作為今天的筆記吧2014-08-0816行Python代碼實(shí)現(xiàn)微信聊天機(jī)器人并自動智能回復(fù)功能
聊天機(jī)器人自動智能回復(fù)給我們的生活帶來了極大的便利,尤其在業(yè)務(wù)比較繁忙的時(shí)候,智能機(jī)器人給我們帶來極大的方便,今天小編教大家一招通過16行代碼實(shí)現(xiàn)微信聊天智能機(jī)器人,感興趣的朋友一起看看吧2022-01-01一些讓Python代碼簡潔的實(shí)用技巧總結(jié)
隨著項(xiàng)目代碼行數(shù)的增加,不可避免的遇到軟件架構(gòu)腐敗的問題,所以如何寫出簡潔的代碼至關(guān)重要,這篇文章主要給大家介紹了一些讓Python代碼簡潔的實(shí)用技巧,需要的朋友可以參考下2021-08-08Python數(shù)據(jù)清洗工具之Numpy的基本操作
Numpy的操作對象是一個(gè)ndarray,所以在使用這個(gè)庫進(jìn)行計(jì)算的時(shí)候需要將數(shù)據(jù)進(jìn)行轉(zhuǎn)化,這篇文章主要介紹了Python數(shù)據(jù)清洗工具之Numpy的基本操作,需要的朋友可以參考下2021-04-04