視圖的功能就是接收請求,進行處理,與M和T進行交互,返回應答。html
返回html內容HttpResponse,也可能重定向redirect,還能夠返回json數據。python
用戶經過在瀏覽器的地址欄中輸入網址請求網站,對於Django開發的網站,由哪個視圖進行處理請求,是由url匹配找到的。正則表達式
在Urltest/settings.py中經過ROOT_URLCONF指定url配置,默認已經有此配置。django
打開Urltest/urls.py能夠看到默認配置。json
在Urltest/urls.py中進行包含配置,在各自應用中建立具體配置。瀏覽器
定義urlpatterns列表,存儲url()對象,這個名稱是固定的。服務器
urlpatterns中的每一個正則表達式在第一次訪問它們時被編譯,這使得運行很快。函數
url()對象,被定義在django.conf.urls包中,有兩種語法結構。post
語法1:通常在自定義應用中建立一個urls.py來定義url。網站
這種語法用於Urltest/urls.py中,目的是將應用的urls配置到應用內部,數據更清晰而且易於維護。
url(正則,include('應用.urls'))
例如booktest中的urls。
url(r'^',include('booktest.urls')),
在booktest目錄下建立urls.py文件。
語法2:指定URL和視圖函數的對應關係。
在應用內部建立urls.py文件,指定請求地址與視圖的對應關係。
url(正則,'視圖函數名稱')
例如在booktest/urls.py中建立首頁的url。
from django.conf.urls import url from booktest import views urlpatterns=[ url(r'^$',views.index), ]
在booktest/views.py中建立視圖index。
from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("視圖函數index")
正則部分推薦使用r,表示字符串不轉義,這樣在正則表達式中使用\只寫一個就能夠。 說明2:不能在開始加反斜槓,推薦在結束加反斜槓。
正確:index/ 正確:index 錯誤:/index 錯誤:/index/
請求的url被看作是一個普通的python字符串,進行匹配時不包括域名、get或post參數。 如請求地址以下:
http://127.0.0.1:8000/delete1/?a=10
去除掉域名和參數部分,並將最前面的/去除後,只剩下以下部分與正則匹配。
delete1/
打開booktest/urls.py文件,定義與這個地址匹配的url以下:
url(r'^delete\d+/$',views.show_arg),
在booktest/views.py中建立視圖show_arg。
def show_arg(request): return HttpResponse('show_arg')
啓動服務器,輸入上面的網址,瀏覽器中效果以下圖。
能夠在匹配過程當中從url中捕獲參數,每一個捕獲的參數都做爲一個普通的python字符串傳遞給視圖。
獲取值須要在正則表達式中使用小括號,分爲兩種方式:
兩種參數的方式不要混合使用,在一個正則表達式中只能使用一種參數方式。
方式1:位置參數
直接使用小括號,經過位置參數傳遞給視圖。
爲了提取參數,修改上面的正則表達式以下:
url(r'^delete(\d+)/$',views.show_arg),
修改視圖show_arg以下:
參數的名字是任意的如a一、b8,儘可能作到見名知意。
def show_arg(request,id): return HttpResponse('show arg %s'%id)
刷新瀏覽器頁面,效果以下圖:
在地址欄輸入以下地址:
方式2:關鍵字參數
在正則表達式部分爲組命名。
修改正則表達式以下:
其中?P部分表示爲這個參數定義的名稱爲id,能夠是其它名稱,起名作到見名知意。
url(r'^delete(?P<id1>\d+)/$',views.show_arg),
修改視圖show_arg以下:
視圖show_arg此時必需要有一個參數名爲id1,不然報錯。
def show_arg(request,id1): return HttpResponse('show arg %s'%id1)
刷新瀏覽器頁面,效果以下圖:
視圖就是python中的函數,視圖通常被定義在"應用/views.py"文件中,此例中爲"booktest/views.py"文件。視圖必須返回一個HttpResponse對象或子對象做爲響應。響應能夠是一張網頁的HTML內容,一個重定向,一個404錯誤等。
url:http://127.0.0.1:8000/aindex?a=1
1) 去除域名和後面的參數,剩下/aindex,再把前面的/去掉,剩下aindex。
2) 拿aindex先到項目的url.py文件中進行從上到下的匹配,匹配成功以後執行後面對應的處理動做,就是把匹配成功的部分a字符去除,而後拿剩下的部分index到應用的urls.py文件中再進行從上到下的匹配。
3) 若是匹配成功則調用相應的視圖產生內容返回給客戶端。若是匹配失敗則產生404錯誤。
Django內置處理HTTP錯誤的視圖,主要錯誤及視圖包括:
若是想看到錯誤視圖而不是調試信息,須要修改djangotest/setting.py文件的DEBUG項。
DEBUG = False ALLOWED_HOSTS = ['*', ]
將請求地址進行url匹配後,沒有找到匹配的正則表達式,則調用404視圖,這個視圖會調用404.html的模板進行渲染。視圖傳遞變量request_path給模板,表示致使錯誤的URL。
在templates中建立404.html。
定義代碼以下:
<html> <head> <title></title> </head> <body> 找不到了 <hr/> {{request_path}} </body> </html>
在瀏覽器中輸入以下網址:
http://127.0.0.1:8000/test/
運行效果以下圖:
在視圖中代碼運行報錯會發生500錯誤,調用內置錯誤視圖,使用templates/500.html模板渲染。
視圖處理過程以下圖: