簡單瞭解一下什麼是Django或者說Django是作什麼的?

Django是什麼?

Django是一個基於Python的Web應用框架。它與Python的另一個Web 框架 Flask最大的區別是,它奉行 「包含一切」 的哲學。該理念即爲:建立 Web 應用所需的通用功能都應該包含到框架中,而不該存在於獨立的軟件包中。例如,身份驗證、 URL 路由、 模板系統、 對象關係映射 (ORM) 和 數據庫遷移等功能都已包含在Django 框架中。雖然看上去失去了一些彈性,可是卻可讓你在構建網站的時候更加有效率。正則表達式

因爲Django最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站的。因此,咱們能夠發如今使用Django的不少網站裏,都是用於做爲CMS(內容管理系統)來使用的。使用Django的一些比較知名的網站以下圖所示:數據庫

Django的工做方式

Django是一個MTV框架,其架構模板看上去與傳統的MVC架構並無太大的區別。Django將MVC中的視圖進一步分解爲 Django視圖 和 Django模板兩個部分,分別決定 「展示哪些數據」 和 「如何展示」,使得Django的模板能夠根據須要隨時替換,而不只僅限制於內置的模板。至於MVC控制器部分,由Django框架的URLconf來實現。瀏覽器

具體流程:緩存

  • 瀏覽器進行HTTP request;
  • Django根據URL configuration分配至對應的View;
  • View進行數據庫的操做或其它運算;
  • View層將數據發送到Template進行渲染,並傳回HttpResponse內容;
  • 瀏覽器根據HTTP response顯示網頁內容。

Django框架的核心包括:一個面向對象的映射器(ORM),用做數據模型(以Python類的形式定義)和關係性數據庫間的媒介;一個基於正則表達式的URL分發器;一個視圖系統,用於處理請求;以及一個模板系統。除此以外還包含:服務器

  • 一個輕量級的、獨立的Web服務器,用於開發和測試。
  • 一個表單序列化及驗證系統,用於HTML表單和適於數據庫存儲的數據之間的轉換。
  • 一個緩存框架,並有幾種緩存方式可供選擇。
  • 中間件支持,容許對請求處理的各個階段進行干涉。
  • 內置的分發系統容許應用程序中的組件採用預約義的信號進行相互間的通訊。
  • 一個序列化系統,可以生成或讀取採用XML或JSON表示的Django模型實例。
  • 一個用於擴展模板引擎的能力的系統。
  • 一個可擴展的認證系統,用戶登陸與權限檢查,快速開發用戶會話功能。
  • 國際化:內置國際化系統,方便開發出多種語言的網站。
  • 自動化的管理界面:不須要你花大量的工做來建立人員管理和更新內容。
  • 一組產生 RSS 和 Atom 的工具和產生Google 站點地圖 (Google Sitemaps)的工具
  • 一套支持輕量級標記語言(Textile和Markdown)的模板庫
  • 一套協助建立地理信息系統(GIS)的基礎框架
  • 一個靈活的評論系統
  • 防止跨站請求僞造(cross-site request forgery)的工具

優缺點總結

Django的主要目標是使得開發複雜的、數據庫驅動的網站變得簡單。Django注重組件的重用性和「可插拔性」,敏捷開發和DRY法則(Don’t Repeat Yourself)。在Django中Python被廣泛使用,甚至包括配置文件和數據模型。session

Django優勢:架構

  • 完美的文檔,Django近乎完美的官方文檔。
  • 全套的解決方案(full-stackframework + batteries included),基本要什麼有什麼(好比:cache、session、feed、orm、geo、auth),並且所有Django本身造,開發網站應手的工具Django基本都給你作好了,所以開發效率是不用說的。
  • 強大的URL路由配置,Django讓你能夠設計出很是優雅的URL。
  • 自助管理後臺,讓你幾乎不用寫一行代碼就擁有一個完整的後臺管理界面。

Django的缺點:(源自Django堅持本身造全部的輪子,整個系統相對封閉)框架

  • 系統緊耦合,若是你以爲Django內置的某項功能不是很好,想用喜歡的第三方庫來代替是很難的,好比說的ORM、Template。要在Django裏用SQLAlchemy或Mako幾乎是不可能,即便打了一些補丁用上了也會讓你以爲很是很是彆扭。
  • 自帶的ORM遠不如SQLAlchemy強大,SQLAlchemy是Python世界裏事實上的ORM標準,其它框架都支持SQLAlchemy了,惟獨Django仍然堅持本身的那一套。
  • Template功能比較弱,不能插入Python代碼,要寫複雜一點的邏輯須要另外用Python實現Tag或Filter。
  • URL配置雖然強大,但所有要手寫,高手和初識Django的人配出來的URL會有很大差別。
  • Django的auth跟其它模塊結合緊密,功能也挺強,但作的有點過了,用戶的數據庫schema都給你定好了,好比不少網站要求email地址惟一,可schema裏這個字段的值不是惟一的。
相關文章
相關標籤/搜索