主要內容
1. Django框架發展
2. Django架構,MTV模式
3. 開發流程
4. 開發實例——Poll
python下各種框架
一個完整的Web應用框架包括下面功能的支持
服務發布
URL分發
模板支持
數據庫處理
Python框架一般都支持前3個方面,按對4個功能的支持情況分類如下:
平臺性框架:不依賴數據庫,更關注服務的高校構建和運行平臺的穩定。代表性框架:Zope和Twisted
輕小型框架:認為數據庫不是應用的必要因素,更關注友好快速的簡單任務的開發。代表性框架:Cherry,Quixote和web.py,沒有內置的數據庫支持模塊。
一站式框架:認為數據庫是應用的重要因素,關注如何僅基于本身快速實現一個功能性網站。代表性框架:Django,TurboGears
Django簡介
Django(維基百科) Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的軟件設計模式,即模型M,視圖V和控制器C。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。并于2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。
Django的主要目標是使得開發復雜的、數據庫驅動的網站變得簡單。Django注重組件的重用性和“可插拔性”,敏捷開發和DRY法則(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和數據模型。
Django 于 2008年6月17日正式成立基金會。
Django吸引人的特點
在Python各種web框架中,Django的文檔最完善、市場占有率最高、招聘職位最多!
優點
l 完美的文檔,Django的成功,我覺得很大一部分原因要歸功于Django近乎完美的官方文檔(包括Djangobook)。
l 全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發網站應手的工具Django基本都給你做好了,因此開發效率是不用說的,出了問題也算好找,不在你的代碼里就在Django的源碼里。
l 強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django里你基本可以跟丑陋的GET參數說拜拜。
l 自助管理后臺,admin interface是Django里比較吸引眼球的一項contrib,讓你幾乎不用寫一行代碼就擁有一個完整的后臺管理界面。
缺點(源自Django堅持自己造所有的輪子,整個系統相對封閉)
l 系統緊耦合,如果你覺得Django內置的某項功能不是很好,想用喜歡的第三方庫來代替是很難的,比如下面將要說的ORM、Template。要在Django里用SQLAlchemy或Mako幾乎是不可能,即使打了一些補丁用上了也會讓你覺得非常非常別扭。
l Django自帶的ORM遠不如SQLAlchemy強大,除了在Django這一畝三分地,SQLAlchemy是Python世界里事實上的ORM標準,其它框架都支持SQLAlchemy了,唯獨Django仍然堅持自己的那一套。Django的開發人員對SQLAlchemy的支持也是有過討論和嘗試的,不過最終還是放棄了,估計是代價太高且跟Django其它的模塊很難合到一塊。
l Template功能比較弱,不能插入Python代碼,要寫復雜一點的邏輯需要另外用Python實現Tag或Filter。
l URL配置雖然強大,但全部要手寫,這一點跟Rails的Conventionover configuration的理念完全相左,高手和初識Django的人配出來的URL會有很大差異。
l 讓人糾結的auth模塊,Django的auth跟其它模塊結合緊密,功能也挺強的,就是做的有點過了,用戶的數據庫schema都給你定好了,這樣問題就來了,比如很多網站要求email地址唯一,可schema里這個字段的值不是唯一的,糾結是必須的了。
l Python文件做配置文件,而不是更常見的ini、xml或yaml等形式。這本身不是什么問題,可是因為理論上來說settings的值是能夠動態的改變的(雖然大家不會這么干),但這不是最佳實踐的體現。
Django大包大攬,用它來快速開發一些Web運用是很不錯的。如果你順著Django的設計哲學來,你會覺得Django很好用,越用越爽;相反,你如果不能融入或接受Django的設計哲學,你用Django一定會很痛苦,趁早放棄的好。
組件
Django框架的核心包括:一個 面向對象 的映射器,用作數據模型(以Python類的形式定義)和關聯性數據庫間的媒介;一個基于正則表達式的URL分發器;一個視圖系統,用于處理請求;以及一個模板系統。
核心框架中還包括:
l 一個輕量級的、獨立的Web服務器,用于開發和測試。
l 一個表單序列化及驗證系統,用于HTML表單和適于數據庫存儲的數據之間的轉換。
l 一個緩存框架,并有幾種緩存方式可供選擇。
l 中間件支持,允許對請求處理的各個階段進行干涉。
l 內置的分發系統允許應用程序中的組件采用預定義的信號進行相互間的通信。
l 一個序列化系統,能夠生成或讀取采用XML或JSON表示的Django模型實例。
l 一個用于擴展模板引擎的能力的系統。
內置應用
Django 包含了很多應用在它的"contrib"包中,這些包括:
服務的部署
Django 可以運行在啟用了 mod python 的 Apache 2上,或是任何WSGI兼容的Web服務器。Django也有啟動FastCGI服務的能力,因此能夠應用于任何支持FastCGI的機器上。
下列數據庫引擎被Django官方支持:
MicrosoftSQL Server的適配器正在開發中,處于試驗階段。(注:SQL Server的支持在1.0版本中已經被完全去除)
Django1.0已經可以利用Jython運行在任何J2EE服務器。
開發簡單應用的步驟
1. 進入目標文件夾,建立項目django-admin.pystartPRoject mysite。Django框架自動為我們建立所需要的項目文件夾和一些配置文件
2. 進入項目文件夾,建立應用django-admin.py startapppolls。Django框架會自動生成所需要的models.py和views.py等文件
3. 編輯settings.py,將新建的應用Polls,加入到項目中,INSTALLEN_APPS加入一行,‘mysite.polls’,
4. 配置urls.py,加入期望的url規則,訪問mysite.polls.views中的方法
5. 編輯views.py,編寫2個方法
6. 啟動內置開發服務器,django python manage.pyrunserver
7. 在瀏覽器中輸入http://localhost:8000/訪問測試頁面
1. 另注:數據庫連接中。python 2.5及以后的版本內涵sqlite數據庫,不需要另外安裝。name是一定要是包含完整路徑的文件名稱。若文件原本不存在,在使用同步數據庫后,系統會為每個應用自動創建所需要的table,其他數據庫都必須填寫用戶名和密碼,并且需要事先創建好數據庫。
2. app可以放在任何python路徑上。放在與manage.py同級目錄中,將作為該工程的頂級模塊,而不是mysite的子模塊。
3. 如果寫view時采用硬編碼方式,要改變頁面顯示方式,就要改變python代碼。解決方案:利用template系統從python中分離出設計。解決方案:利用template系統從python中分離出設計
應用部署
詳見Django book
Django框架開發效率
用django構建的網站
http://www.djangosites.org/官方展示
在該網站上可以獲得一個應用網站的源碼,以供學習參考。
l 歐洲一個日化網上商店
l http://www.chinesehour.com/中文學習網站
l 焦點網站http://www.focus.com/ 焦點觀察,與專家對話。框架非常適合
l 國際象棋俱樂部https://secure.chess.com/chesspark.html在線國際象棋
l 代碼管理網站 http://dpaste.com/
參考資料
http://www.360doc.com/content/09/1206/13/50698_10483406.shtml#Django MVC模式,Django發展
http://simple-is-better.com/news/385Ruby 跟 Python 本質上不同,Python是非常簡約的語言
http://www.360doc.com/content/12/0229/11/2902158_190487111.shtml淺談五大Python Web框架
http://djangobook.py3k.cn/2.0/DjangoBook2.0中文翻譯(很好)
Django官網https://www.djangoproject.com/
http://codinn.com/projects/django-best-practices/view/Django最佳實踐
新聞熱點
疑難解答