Django 圍繞「可重用應用[1]」的思想創建:自包含的包提供了可重複使用的特性。你能夠將這些可重用應用組裝起來,在加上適用於你的網站的特定代碼,來搭建你本身的網站。Django 具備一個豐富多樣的、由可供你使用的可重用應用組建起來的生態系統——PyPI 列出了超過 8000個 Django 應用[2]——可你該如何知道哪些是最好的呢?html
爲了節省你的時間,咱們總結了五個最受喜好的 Django 應用。它們是:python
咱們一樣推薦你看看 Django Packages[8],這是一個可重用 Django 應用的目錄。Django Packages 將 Django 應用組織成「表格」,你能夠在功能類似的不一樣應用之間進行比較並作出選擇。你能夠查看每一個包中提供的特性和使用統計狀況。(好比:這是 REST 工具的表格[9],也許能夠幫助你理解咱們爲什麼推薦 Django REST Framework。linux
咱們使用 Django 的時間幾乎比任何人都長。在 Django 發佈以前,咱們當中的兩我的(Frank 和 Jacob)就在 Lawrence Journal-World[10] (Django 的發源地)工做(事實上,是他們兩人推進了 Django 開源發佈的進程)。咱們在過去的八年當中運行着一個諮詢公司,來建議公司怎樣最好地應用 Django。git
因此,咱們見證了 Django 項目和社羣的完整歷史,咱們見證了那些流行的軟件包的興起和沒落。在咱們三個之中,咱們我的可能試用了 8000 個應用中至少一半以上,或者咱們知道誰試用過這些。咱們對如何使應用變得堅實可靠有着深入的理解,而且咱們對給予這些應用持久力量的來源也有着深刻的瞭解。github
創建一個新項目或應用老是有些痛苦。你能夠用 Django 內建的 startproject
。不過,若是你像咱們同樣,對如何作事比較挑剔。Cookiecutter 爲你提供了一個快捷簡單的方式來構建項目或易於重用的應用模板,從而解決了這個問題。一個簡單的例子:鍵入 pip install cookiecutter
,而後在命令行中運行如下命令:django
$ cookiecutter https://github.com/marcofucci/cookiecutter-simple-django
接下來你須要回答幾個簡單的問題,好比你的項目名稱、目錄repo、做者名字、E-Mail 和其餘幾個關於配置的小問題。這些可以幫你補充項目相關的細節。咱們使用最最原始的 「foo」 做爲咱們的目錄名稱。因此 cokkiecutter 在子目錄 「foo」 下創建了一個簡單的 Django 項目。後端
若是你在 「foo」 項目中閒逛,你會看見你剛剛選擇的其它設置已經過模板,連同所需的子目錄一同嵌入到文件當中。這個「模板」在咱們剛剛在執行 cookiecutter
命令時輸入的惟一一個參數 Github 倉庫 URL 中定義。這個樣例工程使用了一個 Github 遠程倉庫做爲模板;不過你也可使用本地的模板,這在創建非重用項目時很是有用。服務器
咱們認爲 cookiecutter 是一個極棒的 Django 包,可是,事實上其實它在面對純 Python 甚至非 Python 相關需求時也極爲有用。你可以將全部文件以一種可重複的方式精確地擺放在任何位置上,使得 cookiecutter 成爲了一個簡化(DRY)工做流程的極佳工具。cookie
多年來,託管網站的靜態資源——圖片、Javascript、CSS——都是一件很痛苦的事情。Django 內建的django.views.static.serve[13] 視圖,就像 Django 文章所述的那樣,「在生產環境中不可靠,因此只應爲開發環境的提供輔助功能。」但使用一個「真正的」 Web 服務器,如 NGINX 或者藉助 CDN 來託管媒體資源,配置起來會比較困難。app
Whitenoice 很簡潔地解決了這個問題。它能夠像在開發環境那樣輕易地在生產環境中設置靜態服務器,而且針對生產環境進行了加固和優化。它的設置方法極爲簡單:
確保你在使用 Django 的 contrib.staticfiles[14] 應用,並確認你在配置文件中正確設置了 STATIC_ROOT
變量。
在 wsgi.py
文件中啓用 Whitenoise:
from django.core.wsgi import get_wsgi_application from whitenoise.django import DjangoWhiteNoise application = get_wsgi_application() application = DjangoWhiteNoise(application)
配置它真的就這麼簡單!對於大型應用,你可能想要使用一個專用的媒體服務器和/或一個 CDN,但對於大多數小型或中型 Django 網站,Whitenoise 已經足夠強大。
如需查看更多關於 Whitenoise 的信息,請查看文檔[15]。
REST API 正在迅速成爲現代 Web 應用的標準功能。 API 就是簡單的使用 JSON 對話而不是 HTML,固然你能夠只用 Django 作到這些。你能夠製做本身的視圖,設置合適的 Content-Type
,而後返回 JSON 而不是渲染後的 HTML 響應。這是在像 Django Rest Framework[17](下稱 DRF)這樣的 API 框架發佈以前,大多數人所作的。
若是你對 Django 的視圖類很熟悉,你會以爲使用 DRF 構建 REST API 與使用它們很類似,不過 DRF 只針對特定 API 使用場景而設計。通常的 API 設置只須要一點代碼,因此咱們沒有提供一份讓你興奮的示例代碼,而是強調了一些可讓你生活的更溫馨的 DRF 特性:
固然,你能夠不依賴 DRF 來構建 API,但咱們沒法想象你不去使用 DRF 的緣由。就算你不使用 DRF 的所有特性,使用一個成熟的視圖庫來構建你本身的 API 也會使你的 API 更加一致、徹底,更能提升你的開發速度。若是你尚未開始使用 DRF, 你應該找點時間去體驗一下。
Wagtail 是當下 Django CMS(內容管理系統)世界中最受人青睞的應用,而且它的熱門有足夠的理由。就像大多數的 CMS 同樣,它具備極佳的靈活性,能夠經過簡單的 Django 模型來定義不一樣類型的頁面及其內容。使用它,你能夠從零開始在幾個小時而不是幾天以內來和建造一個基本能夠運行的內容管理系統。舉一個小例子,爲你公司的員工定義一個員工頁面類型能夠像下面同樣簡單:
from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.fields import RichTextField from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel from wagtail.wagtailimages.edit_handlers import ImageChooserPanel class StaffPage(Page): name = models.CharField(max_length=100) hire_date = models.DateField() bio = models.RichTextField() email = models.EmailField() headshot = models.ForeignKey('wagtailimages.Image', null=True, blank=True) content_panels = Page.content_panels + [ FieldPanel('name'), FieldPanel('hire_date'), FieldPanel('email'), FieldPanel('bio',classname="full"), ImageChoosePanel('headshot'), ]
然而,Wagtail 真正出彩的地方在於它的靈活性及其易於使用的現代化管理頁面。你能夠控制不一樣類型的頁面在哪網站的哪些區域能夠訪問,爲頁面添加複雜的附加邏輯,還天生就支持標準的適應/審批工做流。在大多數 CMS 系統中,你會在開發時在某些點上遇到困難。而使用 Wagtail 時,咱們通過不懈努力找到了一個突破口,使得讓咱們輕易地開發出一套簡潔穩定的系統,使得程序徹底依照咱們的想法運行。若是你對此感興趣,咱們寫了一篇[深刻理解 Wagtail][17。
django-allauth 是一個可以解決你的註冊和認證需求的、可重用的 Django 應用。不管你須要構建本地註冊系統仍是社交帳戶註冊系統,django-allauth 都可以幫你作到。
這個應用支持多種認證體系,好比用戶名或電子郵件。一旦用戶註冊成功,它還能夠提供從無需認證到電子郵件認證的多種帳戶驗證的策略。同時,它也支持多種社交帳戶和電子郵件帳戶。它還支持插拔式註冊表單,可以讓用戶在註冊時回答一些附加問題。
django-allauth 支持多於 20 種認證提供者,包括 Facebook、Github、Google 和 Twitter。若是你發現了一個它不支持的社交網站,頗有可能經過第三方插件提供該網站的接入支持。這個項目還支持自定義後端,能夠支持自定義的認證方式,對每一個有定製認證需求的人來講這都很棒。
django-allauth 易於配置,且有完善的文檔[22]。該項目經過了不少測試,因此你能夠相信它的全部部件都會正常運做。
你有最喜好的 Django 包嗎?請在評論中告訴咱們。