第三章 網頁基礎篇

2021-09-08 02:16:23 字數 3891 閱讀 1932

建立乙個顯示當前日期和時間的網頁。這是乙個不錯的 動態 網頁範例,因為該頁面的內容不是靜態的。相反,其內容是隨著計算(本例中是對當前時間的計算)的結果而變化的。這個簡單的範例既不涉及資料庫,也不需要任何使用者輸入,僅輸出伺服器的內部時鐘。

實現**:

1、描述

urlconf 就像是 django 所支撐**的目錄。它的本質是 url 模式以及要為該 url 模式呼叫的檢視函式之間的對映表。你就是以這種方式告訴 django,對於這個 url 呼叫這段**,對於那個 url 呼叫那段**。但必須記住的是檢視函式必須位於 python 搜尋路徑之中

所有url對映到檢視都在urls.py檔案中配置

1

from django.conf.urls.defaults import *

23 urlpatterns = patterns('',4#

example:5#

67#uncomment this for admin:8#

(r'^admin/', include('django.contrib.admin.urls')),

9 (r'^time/$', current_datetime),

)
**描述:

上面第乙個第乙份檢視:動態內容

就可以這樣訪問: 

url正規表示式:

符號                       匹配

. (dot)                   任意字元

\d               

任意數字       

[a-z]            

任意字元,

a-z                      (大寫)

[a-z]            

任意字元,

a-z                       (小寫)

[a-za-z]         

任意字元,

a-z                       (不區分大小寫)

+                

匹配乙個或更多 (例如, \d+

匹配乙個或多個數字字元)

[^/]+             

不是/的任意字元

*                 

匹配0個或更多 (例如, \d*

匹配0個或更多數字字元) 

匹配1個到3個(包含)

1、django如何處理請求: 完整細節

通過 urlconf 解析到哪個檢視函式來返回 httpresponse

可以通過中介軟體(middleware) 來短路或者增強。關於中介軟體的細節將在第十五章詳細談論,這裡給出 圖3-1 讓你先了解大體概念.

當伺服器收到乙個http請求以後,乙個伺服器特定的 handler 會建立 httprequest

並傳遞給下乙個元件並處理。

這個 handler 然後呼叫所有可用的request或者view中介軟體。這些型別的中介軟體通常是用來增強 httprequest

物件來對一些特別型別的request做些特別處理。只要其中有乙個返回 httpresponse

,系統就跳過對檢視的處理。 

即便是最棒的程式設計師也會有出錯的時候, 這個時候 異常處理中介軟體(exception middleware) 可以幫你的大忙。如果乙個檢視函式丟擲異常,控制器會傳遞給異常處理中介軟體處理。如果這個中介軟體沒有返回 httpresponse

,意味著它不能處理這個異常,這個異常將會再次丟擲。 

即便是這樣,你也不用擔心。django包含預設的檢視來生成友好的404 和 500 回應(response)。

最後, response middleware 做傳送 httpresponse

給瀏覽器之前的後處理或者清除請求用到的相關資源。

2、url配置和松耦合

django和url配置背後的哲學: 松耦合 原則。簡單的說,松耦合是乙個重要的保證互換性的軟體開發方法。如果兩段**是松耦合的,那麼改動其中一段**不會影響另一段**,或者只有很少的一點影響。

3、404 錯誤

這個頁面的功能不只是顯示404的基本錯誤資訊,它同樣精確的告訴你django使用了哪個url配置和這個配置裡的每乙個模式。這樣,你應該能了解到為什麼這個請求會丟擲404錯誤。

在我們的第乙個檢視範例中,儘管內容是動態的,但是url ( /time/

)是靜態的。在大多數動態web應用程式,url通常都包含有相關的引數。

讓我們建立第二個檢視來顯示當前時間和加上時間偏差量的時間,設計是這樣的: /time/plus/1/

顯示當前時間+1個小時的頁面 /time/plus/2/

顯示當前時間+2個小時的頁面 /time/plus/3/

顯示當前時間+3個小時的頁面,以此類推。

新手可能會考慮寫不同的檢視函式來處理每個時間偏差量,url配置看起來就象這樣:

1 urlpatterns = patterns('',

2 (r'

^time/$

', current_datetime),

3 (r'

^time/plus/1/$

', one_hour_ahead),

4 (r'

^time/plus/2/$

', two_hours_ahead),

5 (r'

^time/plus/3/$

', three_hours_ahead),

6 (r'

^time/plus/4//$

', four_hours_ahead),

7 )

很明顯,這樣處理是不太妥當的。不但有很多冗餘的檢視函式,而且整個應用也被限制了只支援預先定義好的時間段,2小時,3小時,或者4小時。如果哪天我們要實現 5 小時,我們就不得不再單獨建立新的檢視函式和配置url,既重複又混亂。我們需要在這裡做一點抽象,提取一些共同的東西出來。

解決方案如下:

1

from django.conf.urls.defaults import *

2from mysite.views import current_datetime, hours_ahead

34 urlpatterns = patterns('',

5 (r'

^time/$

', current_datetime),

6 (r'

^time/plus/\d+/$

', hours_ahead),

7 )

讓我們在url模式裡使用萬用字元,url模式是乙個正規表示式,使用正規表示式模式 \d+

來匹配乙個或多個數字

這個url模式將匹配類似 /time/plus/2/

, /time/plus/25/

,甚至 /time/plus/100000000000/

的任何url。更進一步,讓我們把它限制在最大允許99個小時,這樣我們就只允許乙個或兩個數字,正規表示式的語法就是 \d

:(r'^time/plus/\d/$', hours_ahead),

Pytho基礎 第三章

3.1.1 def語句和引數 在呼叫print 或 len 等函式時,會傳入一些值放於括號中間,在此稱為引數。也可以自行定義接收引數的函式。def hello name print hello name hello yang 在此函式定義中,name為乙個 變元 即可以存放引數以及賦值。值得注意的是...

第三章 語言基礎

它是操作符,不是函式,所以不需要引數 也可以使用引數 let message x console.log typeof message string 以下是乙個特殊情況 console.log typeof null object 因為null被認為是乙個對空物件的引用。0.這個型別只有乙個值 un...

第三章 API設計篇

以普通使用者為例,實現使用者註冊 登入 密碼修改等介面 version v1 bp user api blueprint bp name url prefix version bp api.route register methods post swag from api docs user reg...