URLconf
用戶通過在瀏覽器的地址欄中輸入網(wǎng)址請求網(wǎng)站,對于Django開發(fā)的網(wǎng)站,由哪一個視圖進行處理請求,是由url匹配找到的。
配置
1)在test3/settings.py中通過ROOT_URLCONF指定url配置,默認(rèn)已經(jīng)有此配置。
ROOT_URLCONF = 'test3.urls'
2)打開test3/urls.py可以看到默認(rèn)配置。
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/',admin.site.urls)
]
注意點
- 在test3/urls.py中進行包含配置,在各自應(yīng)用中創(chuàng)建具體配置。
- 定義urlpatterns列表,存儲url()對象,這個名稱是固定的。
urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得運行很快。
語法
url()對象,被定義在django.conf.urls包中,有兩種語法結(jié)構(gòu):
語法一: 包含,一般在自定義應(yīng)用中創(chuàng)建一個urls.py來定義url。
- 這種語法用于test3/urls.py中,目的是將應(yīng)用的urls配置到應(yīng)用內(nèi)部,數(shù)據(jù)更清晰并且易于維護。
url(正則,include('應(yīng)用.urls'))1)在test3/urls.py文件,包含booktest中的urls。
url(r'^',include('booktest.urls')),
2) 在booktest目錄下創(chuàng)建urls.py文件
語法二: 定義,指定URL和視圖函數(shù)的對應(yīng)關(guān)系。在應(yīng)用內(nèi)部創(chuàng)建urls.py文件,指定請求地址與視圖的對應(yīng)關(guān)系。
url(正則,'視圖函數(shù)名稱')
1)######如示例在booktest/urls.py中創(chuàng)建首頁的url,代碼如下from django.conf.urls import url
from booktest import views
urlpatterns=[
url(r'^$',views.index),
]2)如示例在booktest/views.py中創(chuàng)建視圖index
from django.shortcuts import render
from django.http import HttpResponsedef index(request):
return HttpResponse("視圖函數(shù)index")
- 說明1:正則部分推薦使用r,表示字符串不轉(zhuǎn)義,這樣在正則表達式中使用\只寫一個就可以。 說明2:不能在開始加反斜杠,推薦在結(jié)束加反斜杠。
- 獲取值請求的url被看做是一個普通的python字符串,進行匹配時不包括域名、get或post參數(shù)。 如請求地址如下:
http://127.0.0.1:8000/delete1/?a=10
1)去除掉域名和參數(shù)部分,并將最前面的/去除后,只剩下如下部分與正則匹配。
delete1/
2)打開booktest/urls.py文件,定義與這個地址匹配的url如下:
url(r'^delete\d+/$',views.show_arg),
3)在booktest/views.py中創(chuàng)建視圖show_arg。
def show_arg(request):
return HttpResponse('show_arg')
4)啟動服務(wù)器,輸入上面的網(wǎng)址,瀏覽器中效果如下圖。
可以在匹配過程中從url中捕獲參數(shù),每個捕獲的參數(shù)都作為一個普通的python字符串傳遞給視圖。
獲取值需要在正則表達式中使用小括號,分為兩種方式:
- 位置參數(shù)
- 關(guān)鍵字參數(shù)
- 注意:兩種參數(shù)的方式不要混合使用,在一個正則表達式中只能使用一種參數(shù)方式。
方式一:位置參數(shù)直接使用小括號,通過位置參數(shù)傳遞給視圖。
1)為了提取參數(shù),修改上面的正則表達式如下:
url(r'^delete(\d+)/$',views.show_arg),2)修改視圖show_arg如下:
注意:參數(shù)的名字是任意的如a1、b8,盡量做到見名知意。
def show_arg(request,id):
return HttpResponse('show arg %s'%id)
4)在地址欄輸入如下地址:
http://127.0.0.1:8000/2/?a=10
5)瀏覽器頁面效果如下圖
方式二:關(guān)鍵字參數(shù)
在正則表達式部分為組命名。
1)修改正則表達式如下:
- 其中?P部分表示為這個參數(shù)定義的名稱為id,可以是其它名稱,起名做到見名知意。
url(r'^delete(?P<id1>\d+)/$',views.show_arg),
2)修改視圖show_arg如下:
- 注意:視圖show_arg此時必須要有一個參數(shù)名為id1,否則報錯。
def show_arg(request,id1):
return HttpResponse('show %s'%id1)
3)刷新瀏覽器頁面,效果如下圖
show_avg:3
視圖
視圖就是python中的函數(shù),視圖一般被定義在"應(yīng)用/views.py"文件中,此例中為"booktest/views.py"文件。視圖必須返回一個HttpResponse對象或子對象作為響應(yīng)。響應(yīng)可以是一張網(wǎng)頁的HTML內(nèi)容,一個重定向,一個404錯誤等。
視圖的第一個參數(shù)必須為HttpRequest實例,還可能包含下參數(shù)如:
- 通過正則表達式組獲得的關(guān)鍵字參數(shù)。
- 通過正則表達式組獲取的位置參數(shù)。
內(nèi)置錯誤視圖Django內(nèi)置處理HTTP錯誤的視圖,主要錯誤及視圖包括:
- 404錯誤:page not found視圖
- 500錯誤:server error視圖
制作過程外網(wǎng)站
- 如果想看到錯誤視圖而不是調(diào)試信息,需要修改test3/setting.py文件的DEBUG項。