Django Request簡(jiǎn)介

在當(dāng)代的web應(yīng)用中来氧,清晰優(yōu)雅的URL非常重要舒憾,在Django框架中稚疹,你可以隨心所欲的設(shè)計(jì)你的URL居灯,不用擔(dān)心框架的限制。

概覽

為了給一個(gè)app設(shè)計(jì)URL内狗,你創(chuàng)建一個(gè)Python模塊叫做URLConf怪嫌,這個(gè)模塊是純Python代碼并且用于于映射URL路徑和Python的功能或視圖。

這個(gè)映射關(guān)系可以寫(xiě)的比較短柳沙,它也可以引用其它的映射岩灭,并且由于它是純代碼,所有它可以動(dòng)態(tài)的構(gòu)建赂鲤。

Django如何處理請(qǐng)求

當(dāng)用戶請(qǐng)求一個(gè)由Django構(gòu)建的網(wǎng)站噪径,下面是Django的處理方式來(lái)決定執(zhí)行那一部分的Python代碼

  1. Django找到root(根)URLconf模塊柱恤,根模塊一般與項(xiàng)目同名的目錄下,當(dāng)然這個(gè)可以在ROOT_URLCONF配置中設(shè)置找爱,但是如果請(qǐng)求的HttpRequest對(duì)象由urlconf屬性(通過(guò)中間件設(shè)置)梗顺,它的值將會(huì)用于替換 ROOT_URLCONF的設(shè)置。
  2. Django加載python的模塊车摄,然后朝找urlpattern變量寺谤,這個(gè)應(yīng)該是一系列的django.urls.path()或者django.urls.re_path()的實(shí)例
  3. Django遍歷URL樣式,在第一個(gè)匹配請(qǐng)求的時(shí)候停止遍歷吮播。
  4. 一旦其中的一個(gè)URL樣式被匹配了变屁,django導(dǎo)入和調(diào)用提供的視圖,一般是Python的函數(shù)意狠,視圖將會(huì)傳遞下面的參數(shù)
  • 一個(gè)HttpRequest的實(shí)例
  • 如果匹配的URL樣式返回?zé)o命名的組敞贡,那么從正則表達(dá)式中匹配的部分將作為對(duì)應(yīng)位置的參數(shù)
  • 關(guān)鍵參數(shù)由匹配路徑表達(dá)式的命名部分組成,由指定的參數(shù)覆蓋.
  1. 如果沒(méi)有URL匹配摄职,或者拋出了異常,Django將會(huì)調(diào)用一個(gè)合適的錯(cuò)誤處理視圖获列。

案例

from django.urls import path 
from . import views 
urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

注意:

  • 想要從URL中捕捉值谷市,使用尖括號(hào)
  • 捕捉值可以包含轉(zhuǎn)換后的類(lèi)型,例如<int:name>捕捉的是整數(shù)击孩,如果轉(zhuǎn)換器沒(méi)有包括進(jìn)來(lái)迫悠,任何字符串除了/也可以匹配
  • 在開(kāi)頭部分不需要天劍/,因?yàn)樗?articles巩梢,不是 /articles

請(qǐng)求映射:

  • 請(qǐng)求/article/2005/03/ 對(duì)應(yīng)列表中的第三個(gè)條目创泄,django會(huì)調(diào)用views.month_archive(request,year=2005,month=3)
  • 請(qǐng)求 /article/2003/ 對(duì)應(yīng)列表中的第一個(gè),因?yàn)閐jango找到符號(hào)規(guī)則的就停下來(lái)了括蝠。調(diào)用views.special_case_2003(request)函數(shù)
  • /article/2003 不會(huì)匹配任何一個(gè)條目鞠抑,因?yàn)槊恳粋€(gè)條目后面都有一個(gè) /
  • /articles/2003/03/building-a-django-site/ 匹配最后一個(gè)條目,調(diào)用views.article_detail(request, year=2003, month=3, slug="building-a-django-site") 函數(shù)

Path Converter(路徑轉(zhuǎn)換器)

下面這些是默認(rèn)可用的轉(zhuǎn)換器

  • str: 匹配非空字符串忌警,除了/搁拙。這個(gè)是默認(rèn)的轉(zhuǎn)換器
  • int 匹配0或者任何正整數(shù)
  • slug 匹配ASCII租車(chē)的字符串,加上-_法绵。例如 today_is-2018-10也可以
  • path 匹配非空的字符串箕速,包含/,這個(gè)可以匹配一個(gè)完整的URL朋譬,而不僅僅是路徑中的一個(gè)片段(str)

當(dāng)然也可以注冊(cè)自己的轉(zhuǎn)換器盐茎,也不麻煩,可以參考官方文檔

使用正則表達(dá)式

如果路徑轉(zhuǎn)換器的語(yǔ)法不夠高效來(lái)定義你的URL樣式徙赢,你可以使用正則表達(dá)式字柠,這時(shí)使用re_path探越,而不是path

正則表達(dá)式的語(yǔ)法為:
(?P<name>pattern) ,name是組名募谎,pattern是要匹配的樣式

看下面的例子扶关,這樣的表達(dá)實(shí)現(xiàn)了和剛才使用轉(zhuǎn)換器同樣的功能。

from django.urls import path, re_path 
from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003), 
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), 
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$',views.article_detail),
]

額外

  • URLconf模塊只是用來(lái)匹配路徑数冬,并不處理請(qǐng)求方法节槐,像GET,POST拐纱,PUT等不同類(lèi)型的請(qǐng)求也會(huì)路由到同一個(gè)Python函數(shù)中铜异。
  • 使用include可以引入其他的url模塊。

最后

以上的基本能滿足初步的開(kāi)發(fā)秸架,先暫時(shí)到這里揍庄。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市东抹,隨后出現(xiàn)的幾起案子蚂子,更是在濱河造成了極大的恐慌,老刑警劉巖缭黔,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件食茎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡馏谨,警方通過(guò)查閱死者的電腦和手機(jī)别渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惧互,“玉大人哎媚,你說(shuō)我怎么就攤上這事『袄埽” “怎么了拨与?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)管宵。 經(jīng)常有香客問(wèn)我截珍,道長(zhǎng),這世上最難降的妖魔是什么箩朴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任岗喉,我火速辦了婚禮,結(jié)果婚禮上炸庞,老公的妹妹穿的比我還像新娘钱床。我一直安慰自己,他們只是感情好埠居,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布查牌。 她就那樣靜靜地躺著事期,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纸颜。 梳的紋絲不亂的頭發(fā)上兽泣,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音胁孙,去河邊找鬼唠倦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涮较,可吹牛的內(nèi)容都是我干的稠鼻。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼狂票,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼候齿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起闺属,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慌盯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掂器,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體润匙,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年唉匾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匠楚。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巍膘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芋簿,到底是詐尸還是另有隱情峡懈,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布与斤,位于F島的核電站肪康,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏撩穿。R本人自食惡果不足惜磷支,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望食寡。 院中可真熱鬧雾狈,春花似錦、人聲如沸抵皱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至移盆,卻和暖如春悼院,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咒循。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工据途, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剑鞍。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓昨凡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蚁署。 傳聞我的和親對(duì)象是個(gè)殘疾皇子便脊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容