Django (Python)

Django

 

程式語言        Python

類型        Web應用框架

許可協議        BSD License

網站        www.djangoproject.com

 

簡介

Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MVC(註一)的軟體設計模式,即模型(Model),視圖(Views)和控制器(Controller)。最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。並於2005年7月在BSD許可證下發布。

 

 

Django的主要目標是使得開發複雜的、資料庫驅動的網站變得簡單。

Django注重組件的重用性和「可插拔性」,敏捷開發和DRY法則(Don't Repeat Yourself)。

Django是python中資源最多,也是最多人使用的web framework

 

 

組件

Django框架的核心包括:一個物件導向的映射器,用作數據模型(以Python class的形式定義)和關聯性資料庫間的媒介;

一個基於正則表達式(註二)的URL分發器;

一個用來處理請求的視圖系統;

以及一個模板系統。

 

核心框架中還包括:

一個輕量級的、獨立的Web伺服器,用於開發和測試。

一個表單序列化及驗證系統,用於HTML表單和適於資料庫存儲的數據之間的轉換。

一個緩存框架,並有幾種緩存方式可供選擇。

中間件支持,允許對請求處理的各個階段進行干涉。

內置的分發系統允許應用程序中的組件採用預定義的信號進行相互間的通信。

一個序列化系統,能夠生成或讀取採用XML或JSON表示的Django模型實例。

一個用於擴展模板引擎的能力的系統。

 

 

內置應用

 

Django 包含了很多應用在它的"contrib"包中,這些包括:

一個可擴展的認證系統

動態站點管理頁面

一組產生 RSS 和 Atom 的工具

一個靈活的評論系統

產生Google 站點地圖 (Google Sitemaps)的工具

防止跨站請求偽造(cross-site request forgery)的工具

一套支持輕量級標記語言(Textile和Markdown)的模板庫

一套協助創建地理信息系統(GIS)的基礎框架

 

服務的部署

Django 可以運行在啟用了 mod python 的 Apache 2 上,或是任何WSGI兼容的Web伺服器。 Django也有啟動FastCGI服務的能力,因此能夠應用於任何支持FastCGI的機器上。

下列資料庫引擎被Django官方支持:

PostgreSQL

MySQL

SQLite

Oracle

Microsoft SQL Server 的適配器正在開發中,處於試驗階段。(註:SQL Server的支持在1.0版本中已經被完全去除)

Django1.0已經可以利用Jython運行在任何J2EE伺服器。

 

優缺點

 

優點:

1.功能框架清晰

2.編碼量小、開發效率高

3.有現成模版減少UI工作量

4.國外網站開發應用選型熱點

5.可交流資源多

6.在迅速發展中

7. 極佳的向下相容。官方的 roadmap 會明確提到那些功能已 deprecated, 並會在未來的那一版移掉, 有滿長的過渡期。使用者升級的負擔相當小。

8. 提供一組規範, 切開 model、view、control, 還有 class / table 命名規則等, 減少團隊合作的問題。

9. Django的錯誤提示足夠詳細,能馬上知道在那個頁面哪行代碼出錯

 

 

缺點:

1.上手有一定門檻

2.發佈時間短,應用模組資源不多

3. Django 內建的 template 不好用,語法受限,效率也差

4. 內建的 django.test 相關模組不太好用, 而且執行 test 要先重建全部 table, 然後在每個 test case 前truncate 全部 table, 效率不好。

5. Django 違反許多 PEP 8 的規則或 Python 精神, 像是:

 ‧在程式碼裡面 import 別的 module (而非開頭), 並且有 circular import。

 ‧有多種方法做一件事。像自訂 login 的重導頁面卻沒成功, 要搞清楚多種規則的執行順序, 才知道問題出在那, 除錯困難。

 ‧有許多 lazy initialization。很難掌握程式的行為。

 

註一: MVC模式(三層架構模式)(Model-View-Controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、檢視(View)和控制器(Controller)。

MVC模式的目的是實作一種動態的程式設計,使後續對程式的修改和擴充功能簡化,並且使程式某一部分的重複利用成為可能。

 

註二: 正則表達式(regular expression)就是用一個“字符串”來描述一個特徵,然後去驗證另一個“字符串”是否符合這個特徵。比如表達式“ab+” 描述的特徵是“一個'a' 和任意個'b' ”,那麼'ab', 'abb', 'abbbbbbbbbb' 都符合這個特徵。

 

資料來源: 維基百科

             [Django] Web Framework- Django -初階學習心得http://blog.wu-boy.com/2009/04/django-web-framework-django-%E5%88%9D%E9%9A%8E%E5%AD%B8%E7%BF%92%E5%BF%83%E5%BE%97/

 

豆瓣

http://www.douban.com/group/topic/1062061/

龅牙驴的博客

http://2goo.info/blog/baoyalv/Django/2010/03/17/40

facmel’s Bolg 使用 Django 的雜感

http://fcamel-fc.blogspot.tw/2011/11/django.html