天天看點

5 個最受人喜愛的開源 Django 包

為了節省你的時間,我們總結了五個最受喜愛的 django 應用。它們是:

<a target="_blank"></a>

是以,我們見證了 django 項目和社群的完整曆史,我們見證了那些流行的軟體包的興起和沒落。在我們三個之中,我們個人可能試用了 8000 個應用中至少一半以上,或者我們知道誰試用過這些。我們對如何使應用變得堅實可靠有着深刻的了解,并且我們對給予這些應用持久力量的來源也有着深入的了解。

建立一個新項目或應用總是有些痛苦。你可以用 django 内建的 <code>startproject</code>。不過,如果你像我們一樣,對如何做事比較挑剔。cookiecutter 為你提供了一個快捷簡單的方式來建構項目或易于重用的應用模闆,進而解決了這個問題。一個簡單的例子:鍵入 <code>pip install cookiecutter</code>,然後在指令行中運作以下指令:

<code>$ cookiecutter https://github.com/marcofucci/cookiecutter-simple-django</code>

接下來你需要回答幾個簡單的問題,比如你的項目名稱、目錄repo、作者名字、e-mail 和其他幾個關于配置的小問題。這些能夠幫你補充項目相關的細節。我們使用最最原始的 “foo” 作為我們的目錄名稱。是以 cokkiecutter 在子目錄 “foo” 下建立了一個簡單的 django 項目。

如果你在 “foo” 項目中閑逛,你會看見你剛剛選擇的其它設定已認證模闆,連同所需的子目錄一同嵌入到檔案當中。這個“模闆”在我們剛剛在執行 <code>cookiecutter</code> 指令時輸入的唯一一個參數 github 倉庫 url 中定義。這個樣例工程使用了一個 github 遠端倉庫作為模闆;不過你也可以使用本地的模闆,這在建立非重用項目時非常有用。

我們認為 cookiecutter 是一個極棒的 django 包,但是,事實上其實它在面對純 python 甚至非 python 相關需求時也極為有用。你能夠将所有檔案以一種可重複的方式精确地擺放在任何位置上,使得 cookiecutter 成為了一個簡化(dry)工作流程的極佳工具。

whitenoice 很簡潔地解決了這個問題。它可以像在開發環境那樣輕易地在生産環境中設定靜态伺服器,并且針對生産環境進行了加強和優化。它的設定方法極為簡單:

在 <code>wsgi.py</code> 檔案中啟用 whitenoise:

<code>from django.core.wsgi import get_wsgi_application</code>

<code>from whitenoise.django import djangowhitenoise</code>

<code></code>

<code>application = get_wsgi_application()</code>

<code>application = djangowhitenoise(application)</code>

配置它真的就這麼簡單!對于大型應用,你可能想要使用一個專用的媒體伺服器和/或一個 cdn,但對于大多數小型或中型 django 網站,whitenoise 已經足夠強大。

如果你對 django 的視圖類很熟悉,你會覺得使用 drf 建構 rest api 與使用它們很相似,不過 drf 隻針對特定 api 使用場景而設計。一般的 api 設定隻需要一點代碼,是以我們沒有提供一份讓你興奮的示例代碼,而是強調了一些可以讓你生活的更舒适的 drf 特性:

便于內建各種認證方式,如 oauth, basic auth, 或api tokens。

内建請求速率限制。

廣泛的第三方庫生态。

當然,你可以不依賴 drf 來建構 api,但我們無法想象你不去使用 drf 的原因。就算你不使用 drf 的全部特性,使用一個成熟的視圖庫來建構你自己的 api 也會使你的 api 更加一緻、完全,更能提高你的開發速度。如果你還沒有開始使用 drf, 你應該找點時間去體驗一下。

wagtail 是當下 django cms(内容管理系統)世界中最受人青睐的應用,并且它的熱門有足夠的理由。就像大多數的 cms 一樣,它具有極佳的靈活性,可以通過簡單的 django 模型來定義不同類型的頁面及其内容。使用它,你可以從零開始在幾個小時而不是幾天之内來和建造一個基本可以運作的内容管理系統。舉一個小例子,為你公司的員工定義一個員工頁面類型可以像下面一樣簡單:

<code>from wagtail.wagtailcore.models import page</code>

<code>from wagtail.wagtailcore.fields import richtextfield</code>

<code>from wagtail.wagtailadmin.edit_handlers import fieldpanel, multifieldpanel</code>

<code>from wagtail.wagtailimages.edit_handlers import imagechooserpanel</code>

<code>class staffpage(page):</code>

<code>name = models.charfield(max_length=100)</code>

<code>hire_date = models.datefield()</code>

<code>bio = models.richtextfield()</code>

<code>email = models.emailfield()</code>

<code>headshot = models.foreignkey('wagtailimages.image', null=true, blank=true)</code>

<code>content_panels = page.content_panels + [</code>

<code>fieldpanel('name'),</code>

<code>fieldpanel('hire_date'),</code>

<code>fieldpanel('email'),</code>

<code>fieldpanel('bio',classname="full"),</code>

<code>imagechoosepanel('headshot'),</code>

<code>]</code>

然而,wagtail 真正出彩的地方在于它的靈活性及其易于使用的現代化管理頁面。你可以控制不同類型的頁面在哪網站的哪些區域可以通路,為頁面添加複雜的附加邏輯,還天生就支援标準的适應/審批工作流。在大多數 cms 系統中,你會在開發時在某些點上遇到困難。而使用 wagtail 時,我們經過不懈努力找到了一個突破口,使得讓我們輕易地開發出一套簡潔穩定的系統,使得程式完全依照我們的想法運作。如果你對此感興趣,我們寫了一篇[深入了解 wagtail][17。

django-allauth 是一個能夠解決你的注冊和認證需求的、可重用的 django 應用。無論你需要建構本地注冊系統還是社交賬戶注冊系統,django-allauth 都能夠幫你做到。

這個應用支援多種認證體系,比如使用者名或電子郵件。一旦使用者注冊成功,它還可以提供從無需認證到電子郵件認證的多種賬戶驗證的政策。同時,它也支援多種社交賬戶和電子郵件賬戶。它還支援插拔式系統資料庫單,可讓使用者在注冊時回答一些附加問題。

django-allauth 支援多于 20 種認證提供者,包括 facebook、github、google 和 twitter。如果你發現了一個它不支援的社交網站,很有可能通過第三方插件提供該網站的接入支援。這個項目還支援自定義後端,可以支援自定義的認證方式,對每個有定制認證需求的人來說這都很棒。

原文釋出時間為:2016-08-13

本文來自雲栖社群合作夥伴“linux中國”