Django框架視圖介紹與使用詳解
本文實(shí)例講述了Django框架視圖介紹與使用。分享給大家供大家參考,具體如下:
視圖
- 視圖:即一個(gè)python函數(shù),可以叫 視圖函數(shù),或者簡稱 視圖,定義在 應(yīng)用/views.py 文件中。
- 作用:接收并處理請求,調(diào)用M和T,響應(yīng)請求(返回HttpResponse或其子類)
- 每一個(gè)用戶請求,都對應(yīng)著一個(gè)視圖(和url地址),由視圖處理請求后,再返回html頁面內(nèi)容給瀏覽器顯示。
URL配置及匹配
作用:建立url地址和視圖函數(shù)的對應(yīng)關(guān)系,當(dāng)用戶請求某個(gè)url地址時(shí),讓django能找到對應(yīng)的視圖函數(shù)進(jìn)行處理。
配置url:
在應(yīng)用下創(chuàng)建urls.py,然后在項(xiàng)目下的urls.py文件中包含進(jìn)來:
# 項(xiàng)目下的urls.py urlpatterns = [ ... # 包含應(yīng)用下的urls.py文件 url(正則表達(dá)式, include('應(yīng)用名.urls')) ]
在應(yīng)用下的urls.py中,進(jìn)行url請求的配置:
# 應(yīng)用下的urls.py urlpatterns = [ # 每一個(gè)url配置項(xiàng)都需要調(diào)用url函數(shù),指定兩個(gè)參數(shù) # 參數(shù)1: 匹配url的正則表達(dá)式 # 參數(shù)2: 匹配成功后執(zhí)行的視圖函數(shù) url(正則表達(dá)式, 視圖函數(shù)名), ]
案例:
通過http://127.0.0.1:8080/app01/index地址,要調(diào)用視圖函數(shù)index訪問首頁。則可配置如下(域名和端口號不需要配置,只需要配置 app01/index 部分):
在app01應(yīng)用中創(chuàng)建urls.py文件,在該文件中配置url和視圖函數(shù)的對應(yīng)關(guān)系:
# app01.py urlpatterns = [ ... # 進(jìn)入首頁 url(r'^index$', views.index), ]
在項(xiàng)目下urls.py中,把應(yīng)用下的urls.py包含進(jìn)來:
# Project01/urls.py urlpatterns = [ # 包含應(yīng)用app01下的urls.py url(r'^app01/', include('app01.urls')), ]
url匹配流程
輸入如下地址,訪問首頁:
http://127.0.0.1:8000/app01/index?aa=1&bb=xx
匹配流程:
url配置規(guī)則 (針對應(yīng)用下的url配置)
正則表達(dá)式 應(yīng)使用 ^ 和 $ 嚴(yán)格匹配請求url的開頭和結(jié)尾,以便匹配唯一的字符串
url匹配小結(jié):
- 域名、端口、參數(shù)不參與匹配
- 先到項(xiàng)目下的urls.py進(jìn)行匹配,再到應(yīng)用的urls.py匹配
- 自上而下的匹配
- 匹配成功的url部分會(huì)去掉,剩下的部分繼續(xù)作匹配
- 匹配不成功提示404錯(cuò)誤
視圖函數(shù)
每一個(gè)請求的url地址,都對應(yīng)著一個(gè)函數(shù),叫視圖函數(shù),由視圖函數(shù)處理請求后,再返回頁面內(nèi)容給瀏覽器顯示。
在 應(yīng)用/views.py 下,定義視圖函數(shù),示例:
from django.http import HttpResponse # 必須有一個(gè)參數(shù)request def index(request): """進(jìn)入首頁的視圖函數(shù)""" # 處理完請求,返回字符串內(nèi)容給瀏覽器顯示 return HttpResponse("Hello Python")
捕獲URL中的值
問題:對于如下的url地址,如何捕獲url上的兩個(gè)值(代表新聞?lì)悇e和頁碼),并傳給視圖函數(shù)處理?
輸入如下地址:
# /show_news/新聞?lì)悇e/頁碼 http://127.0.0.1:8000/show_news/1/2
解決: 把url中的需要獲取的值部分,設(shè)置為正則表達(dá)式的一個(gè)組。 django在進(jìn)行url匹配時(shí),就會(huì)自動(dòng)把匹配成功的內(nèi)容,作為參數(shù)傳遞給視圖函數(shù)。
位置參數(shù): url中的正則表達(dá)式組,和視圖函數(shù)中的參數(shù)一一對應(yīng),函數(shù)中的參數(shù)名可以隨意指定。
示例:
# 位置參數(shù):新聞查看/新聞?lì)悇e/第幾頁 url(r'^show_news/(\d+)/(\d+)$', views.show_news), # 視圖函數(shù):views.py def show_news(request, a, b): """顯示新聞界面""" return HttpResponse("新聞界面:%s %s" % (a, b))
關(guān)鍵字參數(shù): 在位置參數(shù)的基礎(chǔ)上,對正則表達(dá)式分組進(jìn)行命名:
?P<組名>
視圖函數(shù)中參數(shù)名,必須和正則表達(dá)式分組名一致。
示例:
# 關(guān)鍵字參數(shù):新聞查看/新聞?lì)悇e/第幾頁 url(r'^show_news2/(?P<category>\d+)/(?P<page_no>\d+)$', views.show_news2), # 視圖函數(shù):views.py def show_news2(request, category, page_no): """顯示新聞界面2""" return HttpResponse("新聞界面:%s %s" % (category, page_no))
錯(cuò)誤視圖
Django內(nèi)置了處理HTTP錯(cuò)誤的視圖(在django.views.defaults包下),主要錯(cuò)誤及視圖包括:
- 404錯(cuò)誤:page_not_found 視圖 (找不到界面)
- 500錯(cuò)誤:server_error 視圖 (服務(wù)器內(nèi)部錯(cuò)誤)
- 403錯(cuò)誤:permission_denied 視圖 (權(quán)限拒絕)
一、404錯(cuò)誤及視圖
url匹配失敗后,django會(huì)調(diào)用內(nèi)置的 page_not_found 視圖函數(shù),該視圖函數(shù)會(huì)調(diào)用 404.html的模板進(jìn)行顯示。
開發(fā)階段可以開啟調(diào)試模式,但產(chǎn)品上線后,要關(guān)閉調(diào)試模式。關(guān)閉調(diào)試模式后,會(huì)顯示一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤頁面
# 關(guān)閉調(diào)試模式(開發(fā)模式) DEBUG = False # 表示允許哪些域名可訪問當(dāng)前網(wǎng)站 ALLOWED_HOSTS = ['*']
404錯(cuò)誤界面可以自定義: 在項(xiàng)目templates目錄面創(chuàng)建404.html,django找不到界面時(shí),就會(huì)使用該界面了
二、500錯(cuò)誤及視圖
若是在執(zhí)行視圖函數(shù)時(shí)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤,Django會(huì)默認(rèn)會(huì)調(diào)用 django.views.defaults.server_error 視圖,加載并顯示 500.html 模板:
server error (500)
類似的,可以在項(xiàng)目的templates目錄下,創(chuàng)建500.html來自定義該界面。
三、Django出錯(cuò)日志查看:
查看 Exception Type 以及 Exception Value
查看 Traceback中的出錯(cuò)行
希望本文所述對大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
django authenticate用戶身份認(rèn)證的項(xiàng)目實(shí)踐
Django的contrib.auth模塊中的authenticate()函數(shù)用于對用戶的憑據(jù)進(jìn)行身份驗(yàn)證,本文就來介紹一下django authenticate用戶身份認(rèn)證的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用
本文主要介紹了Flask wtforms實(shí)現(xiàn)表單驗(yàn)證使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Python字典創(chuàng)建 遍歷 添加等實(shí)用基礎(chǔ)操作技巧
字段是Python是字典中唯一的鍵-值類型,本文講述了Python中字典如何創(chuàng)建 遍歷 添加等實(shí)用基礎(chǔ)操作技巧,內(nèi)容非常基礎(chǔ)但非常重要,一定要熟練掌握2018-09-09Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)碰撞改進(jìn)篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,在本課中,我們將討論如何更改?Pygame?處理精靈之間沖突的方式2022-08-08