View

? 視圖接受Web 請(qǐng)求并且返回 Web 響應(yīng)
? 視圖就是一個(gè)python 函數(shù),被定義在 views.py 中
? 響應(yīng)可以是一張網(wǎng)頁的 HTML 內(nèi)容岛蚤,一個(gè)重定向,一個(gè) 404 錯(cuò)誤等等

URLconf

? 在Django框架中坪郭,提供了非常清晰簡(jiǎn)潔的url管理方法
? 在項(xiàng)目文件夾下settings.py 文件中通過ROOT_URLCONF 指定根級(jí) url 的配置
? 新建一個(gè)Django project之后吭产,在項(xiàng)目文件夾urls.py中的urlpatterns列表中來配置 url侣监,
每一個(gè)列表項(xiàng)就是一個(gè)由url函數(shù)的調(diào)用。
? urlpatterns 是一個(gè) url 實(shí)例的列表
? django 的 url 配置有效的降低了后臺(tái)和頁面的耦合度

url()方法

? def url(regex, view, kwargs=None, name=None)
o regex :正則表達(dá)式
o view:視圖函數(shù)
o name: 名稱
o name 用來唯一區(qū)分一個(gè)視圖對(duì)應(yīng)多個(gè) urlconf 的場(chǎng)景
o kwargs: 就是一個(gè)字典類型的參數(shù)
o url(r'^archive-summary/(\d{4})/$', archive, {'summary': True}, "arch-summary"),
o 視圖函數(shù)中使用:
def index(reqeust):
booklist = BookInfo.books.all()
return render(reqeust, 'booktest/index.html', {'req':reqeust,'booklist': booklist})
功能:凡是與regex 匹配的 URL 請(qǐng)求都會(huì)執(zhí)行到 url()函數(shù)中對(duì)應(yīng)的第二個(gè)參數(shù) view 代
表的視圖函數(shù)臣淤。
? 模板鏈接中使用
<a href="detail/{{book.id}}/">{{ book.btitle }}</a>
<a href=" {{book.id}}/">{{ book.btitle }}</a>
? 編寫URLconf 的注意:

o 不需要添加一個(gè)前導(dǎo)的反斜杠橄霉,如應(yīng)該寫作'booktest/',而不應(yīng)該寫作'/booktest/'邑蒋,否
則意味著從根目錄匹配
o 表單action 的 url 除外姓蜂,要有前導(dǎo)的反斜杠
o 每個(gè)正則表達(dá)式前面的 r 表示字符串不轉(zhuǎn)義
? 請(qǐng)求的url 被看做是一個(gè)普通的 python 字符串,進(jìn)行匹配時(shí)不包括 get 或 post 請(qǐng)求的
參數(shù)及域名
http://www.qikuedu.com/python/1/?i=1&p=new医吊,只匹配“python/1/”部分
? 性能:urlpatterns 中的每個(gè)正則表達(dá)式在第一次訪問它們時(shí)被編譯钱慢,這使得系統(tǒng)相當(dāng)快
?
包含其它的URLconfs
include方法
假設(shè)我們?cè)赽ooktest 模塊中定義了一個(gè) index 頁面,想通過
"http://localhost:8000/booktest/index"來訪問

  1. 首先我們?cè)?view.py 中定義index 函數(shù):
    def index(reqeust):
    booklist = BookInfo.books.all()
    return render(reqeust, 'booktest/index.html', {'booklist': booklist})
  2. 然后在應(yīng)用的 urls.py 的 urlpatterns 列表中添加一個(gè) url 配置:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$', views.index),
]
然后運(yùn)行:通過"http://localhost:8000/booktest/index"來訪問
新的問題:但假如一個(gè) project 中有多個(gè) app卿堂,用以上的方式來管理 url 可能會(huì)造成比較
混亂的局面
為了解決這個(gè)問題束莫,我們可以用 include 的方法來配置 url
include(arg, namespace=None)
參數(shù)1:包含booktest 應(yīng)用的urlconf
參數(shù)2:定義命名空間懒棉,用于反解析
? 命名空間(英語:Namespace)是表示標(biāo)識(shí)符的可見范圍。
? 一個(gè)標(biāo)識(shí)符可在多個(gè)命名空間中定義览绿,它在不同命名空間中的含義是互不相干的策严。
? 這樣,在一個(gè)新的命名空間中可定義任何標(biāo)識(shí)符挟裂,它們不會(huì)與任何已有的標(biāo)識(shí)符發(fā)生沖突享钞,
因?yàn)橐延械亩x都處于其它命名空間中揍诽。
多個(gè)urlconf的使用

  1. 在應(yīng)用中創(chuàng)建 urls.py 文件诀蓉,定義本應(yīng)用中的 urlconf

  2. 再在項(xiàng)目的url.py 中使用 include() 包含應(yīng)用 app 的 urlconf
    from django.conf.urls import include, url
    urlpatterns = [
    url(r'^', include('booktest.urls', namespace='booktest')),# 包含booktest 應(yīng)用的
    urlconf
    ]
    ? 匹配過程:先與主 URLconf 匹配,成功后再用剩余的部分與應(yīng)用中的 URLconf 匹配
    請(qǐng)求http://127.0.0.1:8000/booktest/1/
    在項(xiàng)目urls.py中的配置:
    url(r'^booktest/', include('booktest.urls', namespace='booktest')),
    url(r'^([0-9]+)/$', views.detail, name='detail'),
    匹配部分是:1/
    匹配過程:用“1/”與 booktest 應(yīng)用的urls 匹配
    ? 使用include 可以去除 urlconf 的冗余

視圖參數(shù)的傳遞

? 正則表達(dá)式非命名分組暑脆,通過位置參數(shù)傳遞給視圖
url(r'^([0-9]+)/$', views.detail, name='detail'),
? 正則表達(dá)式命名分組渠啤,通過關(guān)鍵字參數(shù)傳遞給視圖,本例中關(guān)鍵字參數(shù)為 id

url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),
? 參數(shù)匹配規(guī)則:優(yōu)先使用命名參數(shù)添吗,如果沒有命名參數(shù)則使用位置參數(shù)
? 每個(gè)捕獲的參數(shù)都作為一個(gè)普通的 python 字符串傳遞給視圖
? 若要從url 中捕獲一個(gè)值沥曹,需要在它周圍設(shè)置一對(duì)圓括號(hào)
? 參數(shù):視圖會(huì)收到來自父 URLconf、當(dāng)前URLconf 捕獲的所有參數(shù)

URL的反向解析

? 問題:如果在視圖碟联、模板中使用硬編碼的鏈接妓美,在 urlconf 發(fā)生改變時(shí),維護(hù)非常麻煩
? 解決:通過指向urlconf 的名稱鲤孵,根據(jù)正則表達(dá)式動(dòng)態(tài)生成鏈接地址
? 視圖:使用django.urls.reverse()函數(shù)
from django.urls import reverse
from django.http import HttpResponseRedirect
def test(reqeust, id):
url name 的使用:
return HttpResponseRedirect(reverse('booktest:detail', args=(1,)))
說明:
第一個(gè)參數(shù):" bookTest: detail": ' booktest應(yīng)用下的 name = detail 的函數(shù)壶栋。
booktest應(yīng)用url conf:
url(r'^booktest/detail/([0-9]+)/$',views.detail,name='detail')
第二個(gè)參數(shù):self.pk會(huì)替代正則表達(dá)式里面的pk
然后 reverse 函數(shù)去解析視圖函數(shù)對(duì)應(yīng)的URL。

? 項(xiàng)目的 url conf:url(r'^', include('booktest.urls', namespace='booktest'))
o 在模版中使用:
o django2.x:
o <a href="{% url 'booktest:detail' book.id %}">{{ book.btitle }}</a>
o django 早期版本:
? <a href="{% url 'booktest.views.detail' book.id %}">{{ book.btitle }}</a>
o 否則報(bào)錯(cuò):
o NoReverseMatch at /booktest/
o Reverse for 'detail 2' not found. 'detail 2' is not a valid view function or
pattern name.
? 在 booktest 應(yīng)用urls.py 中的配置
? app_name='app_name'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末普监,一起剝皮案震驚了整個(gè)濱河市贵试,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凯正,老刑警劉巖毙玻,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異廊散,居然都是意外死亡桑滩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門允睹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运准,“玉大人,你說我怎么就攤上這事擂找〈亮撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵贯涎,是天一觀的道長(zhǎng)听哭。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么陆盘? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任普筹,我火速辦了婚禮,結(jié)果婚禮上隘马,老公的妹妹穿的比我還像新娘太防。我一直安慰自己,他們只是感情好酸员,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布蜒车。 她就那樣靜靜地躺著,像睡著了一般幔嗦。 火紅的嫁衣襯著肌膚如雪酿愧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天邀泉,我揣著相機(jī)與錄音嬉挡,去河邊找鬼。 笑死汇恤,一個(gè)胖子當(dāng)著我的面吹牛庞钢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播因谎,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼基括,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蓝角?” 一聲冷哼從身側(cè)響起阱穗,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎使鹅,沒想到半個(gè)月后揪阶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡患朱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年鲁僚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裁厅。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冰沙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出执虹,到底是詐尸還是另有隱情拓挥,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布袋励,位于F島的核電站侥啤,受9級(jí)特大地震影響当叭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖灸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一蚁鳖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁炎,春花似錦醉箕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至松邪,卻和暖如春坞琴,著一層夾襖步出監(jiān)牢的瞬間哨查,已是汗流浹背逗抑。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寒亥,地道東北人邮府。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溉奕,于是被迫代替她去往敵國(guó)和親褂傀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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