簡(jiǎn)化Django開(kāi)發(fā)的八個(gè)Python包
這個(gè)月的 Python 專(zhuān)欄將介紹一些 Django 包,它們有益于你的工作,以及你的個(gè)人或業(yè)余項(xiàng)目。
Django 開(kāi)發(fā)者們,在這個(gè)月的 Python 專(zhuān)欄中,我們會(huì)介紹一些能幫助你們的軟件包。這些軟件包是我們最喜歡的 Django 庫(kù),能夠節(jié)省開(kāi)發(fā)時(shí)間,減少樣板代碼,通常來(lái)說(shuō),這會(huì)讓我們的生活更加輕松。我們?yōu)?Django 應(yīng)用準(zhǔn)備了六個(gè)包,為 Django 的 REST 框架準(zhǔn)備了兩個(gè)包。幾乎所有我們的項(xiàng)目里,都用到了這些包,真的,不是說(shuō)笑。
不過(guò)在繼續(xù)閱讀之前,請(qǐng)先看看我們關(guān)于讓 Django 管理后臺(tái)更安全的幾個(gè)提示,以及這篇關(guān)于 5 個(gè)***的開(kāi)源 Django 包 的文章。
有用又省時(shí)的工具集合:django-extensions
django-extensions 這個(gè) Django 包非常受歡迎,全是有用的工具,比如下面這些管理命令:
shell_plus打開(kāi) Django 的管理 shell,這個(gè) shell 已經(jīng)自動(dòng)導(dǎo)入了所有的數(shù)據(jù)庫(kù)模型。在測(cè)試復(fù)雜的數(shù)據(jù)關(guān)系時(shí),就不需要再?gòu)膸讉€(gè)不同的應(yīng)用里做導(dǎo)入操作了。clean_pyc刪除項(xiàng)目目錄下所有位置的 .pyc 文件create_template_tags在指定的應(yīng)用下,創(chuàng)建模板標(biāo)簽的目錄結(jié)構(gòu)。describe_form輸出模型的表單定義,可以粘貼到forms.py文件中。(需要注意的是,這種方法創(chuàng)建的是普通 Django 表單,而不是模型表單。)notes輸出你項(xiàng)目里所有帶 TODO、FIXME 等標(biāo)記的注釋。
Django-extensions 還包括幾個(gè)有用的抽象基類(lèi),在定義模型時(shí),它們能滿(mǎn)足常見(jiàn)的模式。當(dāng)你需要以下模型時(shí),可以繼承這些基類(lèi):
TimeStampedModel:這個(gè)模型的基類(lèi)包含了created字段和modified字段,還有一個(gè)save()方法,在適當(dāng)?shù)膱?chǎng)景下,該方法自動(dòng)更新created和modified字段的值。ActivatorModel:如果你的模型需要像status、activate_date和deactivate_date這樣的字段,可以使用這個(gè)基類(lèi)。它還自帶了一個(gè)啟用.active()和.inactive()查詢(xún)集的 manager。TitleDescriptionModel和TitleSlugDescriptionModel:這兩個(gè)模型包括了title和description字段,其中description字段還包括slug,它根據(jù)title字段自動(dòng)產(chǎn)生。
django-extensions 還有其他更多的功能,也許對(duì)你的項(xiàng)目有幫助,所以,去瀏覽一下它的文檔吧!
12 因子應(yīng)用的配置:django-environ
在 Django 項(xiàng)目的配置方面,django-environ 提供了符合 12 因子應(yīng)用 方法論的管理方法。它是另外一些庫(kù)的集合,包括 envparse 和 honcho 等。安裝了 django-environ 之后,在項(xiàng)目的根目錄創(chuàng)建一個(gè) .env 文件,用這個(gè)文件去定義那些隨環(huán)境不同而不同的變量,或者需要保密的變量。(比如 API 密鑰,是否啟用調(diào)試,數(shù)據(jù)庫(kù)的 URL 等)
然后,在項(xiàng)目的 settings.py 中引入 environ,并參考官方文檔的例子設(shè)置好 environ.PATH() 和 environ.Env()。就可以通過(guò) env('VARIABLE_NAME') 來(lái)獲取 .env 文件中定義的變量值了。
創(chuàng)建出色的管理命令:django-click
django-click 是基于 Click 的,(我們之前推薦過(guò)… 兩次 Click),它對(duì)編寫(xiě) Django 管理命令很有幫助。這個(gè)庫(kù)沒(méi)有很多文檔,但是代碼倉(cāng)庫(kù)中有個(gè)存放測(cè)試命令的目錄,非常有參考價(jià)值。 django-click 基本的 Hello World 命令是這樣寫(xiě)的:
# app_name.management.commands.hello.pyimport djclick as click@click.command()@click.argument('name')def command(name):click.secho(f'Hello, {name}')
在命令行下調(diào)用它,這樣執(zhí)行即可:
>> ./manage.py hello LaceyHello, Lacey
處理有限狀態(tài)機(jī):django-fsm
django-fsm 給 Django 的模型添加了有限狀態(tài)機(jī)的支持。如果你管理一個(gè)新聞網(wǎng)站,想用類(lèi)似于“寫(xiě)作中”、“編輯中”、“已發(fā)布”來(lái)流轉(zhuǎn)文章的狀態(tài),django-fsm 能幫你定義這些狀態(tài),還能管理狀態(tài)變化的規(guī)則與限制。
Django-fsm 為模型提供了 FSMField 字段,用來(lái)定義模型實(shí)例的狀態(tài)。用 django-fsm 的 @transition 修飾符,可以定義狀態(tài)變化的方法,并處理狀態(tài)變化的任何副作用。
雖然 django-fsm 文檔很輕量,不過(guò) Django 中的工作流(狀態(tài)) 這篇 GitHub Gist 對(duì)有限狀態(tài)機(jī)和 django-fsm 做了非常好的介紹。
聯(lián)系人表單:#django-contact-form
聯(lián)系人表單可以說(shuō)是網(wǎng)站的標(biāo)配。但是不要自己去寫(xiě)全部的樣板代碼,用 django-contact-form 在幾分鐘內(nèi)就可以搞定。它帶有一個(gè)可選的能過(guò)濾垃圾郵件的表單類(lèi)(也有不過(guò)濾的普通表單類(lèi))和一個(gè) ContactFormView 基類(lèi),基類(lèi)的方法可以覆蓋或自定義修改。而且它還能引導(dǎo)你完成模板的創(chuàng)建,好讓表單正常工作。
用戶(hù)注冊(cè)和認(rèn)證:django-allauth
django-allauth 是一個(gè) Django 應(yīng)用,它為用戶(hù)注冊(cè)、登錄/注銷(xiāo)、密碼重置,還有第三方用戶(hù)認(rèn)證(比如 GitHub 或 Twitter)提供了視圖、表單和 URL,支持郵件地址作為用戶(hù)名的認(rèn)證方式,而且有大量的文檔記錄。***次用的時(shí)候,它的配置可能會(huì)讓人有點(diǎn)暈頭轉(zhuǎn)向;請(qǐng)仔細(xì)閱讀安裝說(shuō)明,在自定義你的配置時(shí)要專(zhuān)注,確保啟用某個(gè)功能的所有配置都用對(duì)了。
處理 Django REST 框架的用戶(hù)認(rèn)證:django-rest-auth
如果 Django 開(kāi)發(fā)中涉及到對(duì)外提供 API,你很可能用到了 Django REST Framework(DRF)。如果你在用 DRF,那么你應(yīng)該試試 django-rest-auth,它提供了用戶(hù)注冊(cè)、登錄/注銷(xiāo),密碼重置和社交媒體認(rèn)證的端點(diǎn)(是通過(guò)添加 django-allauth 的支持來(lái)實(shí)現(xiàn)的,這兩個(gè)包協(xié)作得很好)。
Django REST 框架的 API 可視化:django-rest-swagger
Django REST Swagger 提供了一個(gè)功能豐富的用戶(hù)界面,用來(lái)和 Django REST 框架的 API 交互。你只需要安裝 Django REST Swagger,把它添加到 Django 項(xiàng)目的已安裝應(yīng)用中,然后在 urls.py 中添加 Swagger 的視圖和 URL 模式就可以了,剩下的事情交給 API 的 docstring 處理。

API 的用戶(hù)界面按照 app 的維度展示了所有端點(diǎn)和可用方法,并列出了這些端點(diǎn)的可用操作,而且它提供了和 API 交互的功能(比如添加/刪除/獲取記錄)。django-rest-swagger 從 API 視圖中的 docstrings 生成每個(gè)端點(diǎn)的文檔,通過(guò)這種方法,為你的項(xiàng)目創(chuàng)建了一份 API 文檔,這對(duì)你,對(duì)前端開(kāi)發(fā)人員和用戶(hù)都很有用。

































