Django在新一代的Web框架中非常出色,為什么這么說呢?
為回答該問題,讓我們考慮一下不使用框架設計Python網頁應用程序的情形.貫穿整本書,我們多次展示不使用框架實現網站基本功能的方法,讓讀者認識到框架開發的方便,(不使用框架,更多情況是沒有合適的框架可用. 最重要的是,理解實現的來龍去脈會使你成為一個優秀的web開發者)
使用Python開發Web,最簡單,原始和直接的辦法是使用CGI標準,在1998年這種方式很流行.現在從應用角度解釋它是如何工作: 首先做一個Python腳本,輸出HTML代碼,然后保存成.cgi擴展名的文件,通過瀏覽器訪問此文件,就是這樣.
如下示例,用Python CGI腳本顯示數據庫中最新出版的10本書:不用關心語法細節,僅僅感覺一下基本實現的方法:
#!/usr/bin/env python import MySQLdb print "Content-Type: text/html\n" print "<html><head><title>Books</title></head>" print "<body>" print "<h1>Books</h1>" print "<ul>" connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall():print "<li>%s</li>" % row[0] print "</ul>" print "</body></html>" connection.close()
首先,用戶請求CGI,腳本代碼打印Content-Type行,后面跟著換行.再接下來是一些HTML的起始標簽,然后連接數據庫并執行一些查詢操作,獲取最新的十本書.在遍歷這些書的同時,生成一個書名的HTML列表項.最后,輸出HTML的結束標簽并且關閉數據庫連接.
像這樣的一次性的動態頁面,從頭寫起的方法并非一定不好.其中一點:這些代碼簡單易懂,就算是一個初起步的 開發者都能讀明白這16行的Python的代碼,而且這些代碼從頭到尾做了什么都能了解得一清二楚.不需要學習額外的背景知識,沒有額外的代碼需要去了解. 同樣,也易于部署這16行代碼,只需要將它保存為一個latestbooks.cgi的文件,上傳到網絡服務器上,通過瀏覽器訪問即可.
盡管實現很簡單,還是暴露了一些問題和不便的地方.問你自己這幾個問題:
(1)應用中有多處需要連接數據庫會怎樣呢?每個獨立的CGI腳本,不應該重復寫數據庫連接的代碼.比較實用的辦法是寫一個共享函數,可被多個代碼調用.
(2)一個開發人員確實需要去關注如何輸出Content-Type以及完成所有操作后去關閉數據庫么?此類問題只會降低開發人員的工作效率,增加犯錯誤的幾率. 那些初始化和釋放相關的工作應該交給一些通用的框架來完成.
(3)如果這樣的代碼被重用到一個復合的環境中會發生什么?每個頁面都分別對應獨立的數據庫和密碼嗎?
(4)如果一個Web設計師,完全沒有Python開發經驗,但是又需要重新設計頁面的話,又將發生什么呢?一個字符寫錯了,可能導致整個應用崩潰. 理想的情況是,頁面顯示的邏輯與從數據庫中讀取書本記錄分隔開,這樣Web設計師的重新設計不會影響到之前的業務邏輯.
以上正是Web框架致力于解決的問題. Web框架為應用程序提供了一套程序框架,這樣你可以專注于編寫清晰、易維護的代碼,而無需從頭做起.簡單來說,這就是Django所能做的.