歡迎光臨
每天分享高質量文章

簡化 Django 開發的八個 Python 包 | Linux 中國

這個月的 Python 專欄將介紹一些 Django 包,它們有益於你的工作,以及你的個人或業餘專案。
— Jeff Triplett


致謝
編譯自 | 
https://opensource.com/article/18/9/django-packages
 
 作者 | Jeff Triplett
 譯者 | BeliteX (belitex) ?共計翻譯:1.0 篇 貢獻時間:10 天

這個月的 Python 專欄將介紹一些 Django 包,它們有益於你的工作,以及你的個人或業餘專案。

Django 開發者們,在這個月的 Python 專欄中,我們會介紹一些能幫助你們的軟體包。這些軟體包是我們最喜歡的 Django[1] 庫,能夠節省開發時間,減少樣板代碼,通常來說,這會讓我們的生活更加輕鬆。我們為 Django 應用準備了六個包,為 Django 的 REST 框架準備了兩個包。幾乎所有我們的專案里,都用到了這些包,真的,不是說笑。

不過在繼續閱讀之前,請先看看我們關於讓 Django 管理後臺更安全[2]的幾個提示,以及這篇關於 5 個最受歡迎的開源 Django 包[3] 的文章。

有用又省時的工具集合:django-extensions

django-extensions[4] 這個 Django 包非常受歡迎,全是有用的工具,比如下麵這些管理命令:

◈ shell_plus 打開 Django 的管理 shell,這個 shell 已經自動匯入了所有的資料庫模型。在測試複雜的資料關係時,就不需要再從幾個不同的應用里做匯入操作了。
◈ clean_pyc 刪除專案目錄下所有位置的 .pyc 檔案
◈ create_template_tags 在指定的應用下,創建模板標簽的目錄結構。
◈ describe_form 輸出模型的表單定義,可以粘貼到 forms.py 檔案中。(需要註意的是,這種方法創建的是普通 Django 表單,而不是模型表單。)
◈ notes 輸出你專案里所有帶 TODO、FIXME 等標記的註釋。

Django-extensions 還包括幾個有用的抽象基類,在定義模型時,它們能滿足常見的樣式。當你需要以下模型時,可以繼承這些基類:

◈ TimeStampedModel:這個模型的基類包含了 created 欄位和 modified 欄位,還有一個 save() 方法,在適當的場景下,該方法自動更新 created 和 modified 欄位的值。
◈ ActivatorModel:如果你的模型需要像 statusactivate_date 和 deactivate_date 這樣的欄位,可以使用這個基類。它還自帶了一個啟用 .active() 和 .inactive() 查詢集的 manager。
◈ TitleDescriptionModel 和 TitleSlugDescriptionModel:這兩個模型包括了 title 和 description 欄位,其中 description 欄位還包括 slug,它根據 title 欄位自動產生。

django-extensions 還有其他更多的功能,也許對你的專案有幫助,所以,去瀏覽一下它的文件[5]吧!

12 因子應用的配置:django-environ

在 Django 專案的配置方面,django-environ[6] 提供了符合 12 因子應用[7] 方法論的管理方法。它是另外一些庫的集合,包括 envparse[8] 和 honcho[9] 等。安裝了 django-environ 之後,在專案的根目錄創建一個 .env 檔案,用這個檔案去定義那些隨環境不同而不同的變數,或者需要保密的變數。(比如 API 密鑰,是否啟用除錯,資料庫的 URL 等)

然後,在專案的 settings.py 中引入 environ,並參考官方文件的例子[10]設置好 environ.PATH() 和 environ.Env()。就可以通過 env('VARIABLE_NAME') 來獲取 .env 檔案中定義的變數值了。

創建出色的管理命令:django-click

django-click[11] 是基於 Click[12] 的,(我們之前推薦過[13]… 兩次[14] Click),它對編寫 Django 管理命令很有幫助。這個庫沒有很多文件,但是代碼倉庫中有個存放測試命令[15]的目錄,非常有參考價值。 django-click 基本的 Hello World 命令是這樣寫的:

  1. # app_name.management.commands.hello.py

  2. import djclick as click

  3. @click.command()

  4. @click.argument('name')

  5. def command(name):

  6.    click.secho(f'Hello, {name}')

在命令列下呼叫它,這樣執行即可:

  1. >> ./manage.py hello Lacey

  2. Hello, Lacey

處理有限狀態機:django-fsm

django-fsm[16] 給 Django 的模型添加了有限狀態機的支持。如果你管理一個新聞網站,想用類似於“寫作中”、“編輯中”、“已發佈”來流轉文章的狀態,django-fsm 能幫你定義這些狀態,還能管理狀態變化的規則與限制。

Django-fsm 為模型提供了 FSMField 欄位,用來定義模型實體的狀態。用 django-fsm 的 @transition 修飾符,可以定義狀態變化的方法,並處理狀態變化的任何副作用。

雖然 django-fsm 文件很輕量,不過 Django 中的工作流(狀態)[17] 這篇 GitHub Gist 對有限狀態機和 django-fsm 做了非常好的介紹。

聯繫人表單:#django-contact-form

聯繫人表單可以說是網站的標配。但是不要自己去寫全部的樣板代碼,用 django-contact-form[18] 在幾分鐘內就可以搞定。它帶有一個可選的能過濾垃圾郵件的表單類(也有不過濾的普通表單類)和一個 ContactFormView 基類,基類的方法可以改寫或自定義修改。而且它還能引導你完成模板的創建,好讓表單正常工作。

用戶註冊和認證:django-allauth

django-allauth[19] 是一個 Django 應用,它為用戶註冊、登錄/註銷、密碼重置,還有第三方用戶認證(比如 GitHub 或 Twitter)提供了視圖、表單和 URL,支持郵件地址作為用戶名的認證方式,而且有大量的文件記錄。第一次用的時候,它的配置可能會讓人有點暈頭轉向;請仔細閱讀安裝說明[20],在自定義你的配置[21]時要專註,確保啟用某個功能的所有配置都用對了。

處理 Django REST 框架的用戶認證:django-rest-auth

如果 Django 開發中涉及到對外提供 API,你很可能用到了 Django REST Framework[22](DRF)。如果你在用 DRF,那麼你應該試試 django-rest-auth,它提供了用戶註冊、登錄/註銷,密碼重置和社交媒體認證的端點(是通過添加 django-allauth 的支持來實現的,這兩個包協作得很好)。

Django REST 框架的 API 可視化:django-rest-swagger

Django REST Swagger[23] 提供了一個功能豐富的用戶界面,用來和 Django REST 框架的 API 交互。你只需要安裝 Django REST Swagger,把它添加到 Django 專案的已安裝應用中,然後在 urls.py 中添加 Swagger 的視圖和 URL 樣式就可以了,剩下的事情交給 API 的 docstring 處理。

API 的用戶界面按照 app 的維度展示了所有端點和可用方法,併列出了這些端點的可用操作,而且它提供了和 API 交互的功能(比如添加/刪除/獲取記錄)。django-rest-swagger 從 API 視圖中的 docstrings 生成每個端點的文件,通過這種方法,為你的專案創建了一份 API 文件,這對你,對前端開發人員和用戶都很有用。


via: https://opensource.com/article/18/9/django-packages

作者:Jeff Triplett[25] 選題:lujun9972 譯者:belitex 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

赞(0)

分享創造快樂