Django 是 Python 語言開發的 Web 框架,因其功能強大,開發快速而廣受歡迎。在 Github 上更是收穫了 47K+ 的 Star,其社區和周邊庫也極其活躍,下面我就來分享一些我工做中常用的庫,用好了事半功倍,大大增長開發效率,3 小時幹一天的活,剩下時間能夠好好划水(學習)!html
除了列舉,我還會結合實際使用狀況做使用演示,方便你們根據須要篩選。如下內容較長,建議先收藏再看。前端
本文全部庫均在 Django 2.1 以上實測過,部分庫在 Django 1.11 以上均可以使用。python
Django Rest Framework 是我最最推薦的,也是我開發 Django 服務的必用庫。也許它的知名度已經足夠大,不須要我展開介紹了,我就簡單介紹下它的使用(詳細的也不夠寫😂)ios
Django Rest Framework 給 Django 提供了一套 Restful 規範的 API,並提供了配套的一系列功能,如認證、鑑權、限速等,同時還提供了 UI 的測試界面。git
pip install djangorestframework
複製代碼
結合 Django 的 Model,開發一個 Restful API 只須要 3 步。github
1.1 建立 Model 的序列化類 Serializerredis
Serializer 是序列化類,用於 Model 對象和 API Json 結構的相互轉換。最簡單的實現以下所示。sql
基本的 Model Field 都有對應的 Serializer Field 自動映射,無需額外編寫。同時還提供了一些特殊的 Field,如外鍵 ID 轉換成其餘字段,甚至能夠在序列化時將整個關聯對象引入。數據庫
1.2 建立視圖 Viewdjango
視圖分爲三類:方法視圖,類視圖,基於 Model 的 ViewSet。
a) 方法視圖
方法視圖就是一個方法,相似與 Django 的方法視圖,只是加個裝飾器就好了。
方法 api_view 的參數能夠限定 Http 方法,默認是 GET,最後返回 Response 對象便可。
b) 類視圖
類視圖就是將 Http 方法映射到類的方法上。
c) ViewSet 視圖
ViewSet 視圖更簡單,直接能夠綁定 Model 和視圖。
1.3 綁定路由
最後綁定路由就能夠訪問了。
能夠用 Django 的 path 綁定或者用 router 對象。
還有其餘的認證、鑑權、限速等強大功能,內容太多,這裏就不展開了。
這個庫給 Django API 提供了篩選功能,配合 Rest Framework 使用,能夠一行代碼提供模型的強大篩選 API。
pip install django-filter
複製代碼
而後能夠經過 URL 參數進行篩選。
http://example.com/api/users/1/?name=huoyan&age=20
複製代碼
對於先後端分離的架構,後端 API 須要添加 CORS 相應頭以提供跨域訪問功能。能夠自行在相應的每一個 Header 中添加,固然現成的輪子有了,何樂而不爲?
pip install django-cors-headers
複製代碼
使用很是簡單,只要添加 installed_app
和 middlewares
就能夠了。
同時提供了自定義的配置功能,可直接在 Django 的 settings 裏配置。
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
複製代碼
Django Debug Toolbar 提供了一個測試用的強大調試欄,可在瀏覽器中直接查看相應的配置、Http Header,SQL,日誌等等,很是實用,開發調試必用。
pip install django-debug-toolbar
複製代碼
使用也很是簡單。
須要配置 installed_app
,靜態資源路徑和 Middlewares
。
最後添加路由,判斷 Debug 爲 True 時啓用。
而後咱們訪問 API 或者視圖時會在側邊增長一個調試欄。
對於線上服務來講,多環境不一樣配置是必不可少的,這就須要 Django Environ 來出馬了。Django Environ 可方便地將環境變量合併到 Django settings 配置中。
pip install django-environ
複製代碼
咱們通常在 setting.py 中這麼寫
而後在須要動態配置的設置上獲取值。
咱們能夠經過環境變量或者環境變量文件(惟一直接讀取環境變量 ENV_FILE)來載入配置。
.env 文件相似這樣(on/off 會被自動轉換爲布爾值)
DEBUG=on
CORS=on
LOG_LEVEL=INFO
LOG_FILE=app.log
複製代碼
同時能夠直接轉換數據庫和緩存等配置爲一個環境變量。
settings.py
中這樣配置
而後環境變量或 .env 文件中這樣寫
DATABASE_URL=psql://postgres:123456@127.0.0.1:5432/postgres
CACHE_URL=rediscache://127.0.0.1:6379/1
複製代碼
這比直接用
os.environ.get
載入環境變量好在哪裏呢?
Django 中使用緩存很常見,又簡單又好用的就是 redis 了。Django redis 庫能夠直接配置 redis 做爲 Django 的緩存或 Session 後端,很是簡單。
pip install django-redis
複製代碼
settings.py 中配置
結合上面的 django-environ 就更簡單了,我通常都是結合使用,只須要一行配置代碼,一個環境變量。
CACHES = {
'default': env.cache(),
}
複製代碼
環境變量
CACHE_URL=rediscache://127.0.0.1:6379/1
複製代碼
做爲 Session 後端使用
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
複製代碼
Django Rest Framework 默認的鑑權方式是基於 Django 的(例如 Session 或者 Token),若是須要 JWT 的方式,現成的輪子也有。
pip install djangorestframework-simplejwt
複製代碼
修改 Rest Framekwork 的鑑權配置
而後添加 Token 的獲取和刷新 API
使用以下請求就能獲取 token 了
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}' \
http://localhost:8000/api/token/
{
"access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNDU2LCJqdGkiOiJmZDJmOWQ1ZTFhN2M0MmU4OTQ5MzVlMzYyYmNhOGJjYSJ9.NHlztMGER7UADHZJlxNG0WSi22a2KaYSfd1S-AuT7lU",
"refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImNvbGRfc3R1ZmYiOiLimIMiLCJleHAiOjIzNDU2NywianRpIjoiZGUxMmY0ZTY3MDY4NDI3ODg5ZjE1YWMyNzcwZGEwNTEifQ.aEoAYkSJjoWH1boshQAaTkf8G3yn0kapko6HFRt7Rh4"
}
複製代碼
臨時 token 失效後這樣刷新 token
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImNvbGRfc3R1ZmYiOiLimIMiLCJleHAiOjIzNDU2NywianRpIjoiZGUxMmY0ZTY3MDY4NDI3ODg5ZjE1YWMyNzcwZGEwNTEifQ.aEoAYkSJjoWH1boshQAaTkf8G3yn0kapko6HFRt7Rh4"}' \
http://localhost:8000/api/token/refresh/
{"access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNTY3LCJqdGkiOiJjNzE4ZTVkNjgzZWQ0NTQyYTU0NWJkM2VmMGI0ZGQ0ZSJ9.ekxRxgb9OKmHkfy-zs1Ro_xs1eMLXiR17dIDBVxeT-w"}
複製代碼
在先後端分離的項目上,咱們前端使用 axios 的攔截器自動刷新,業務無需關心,代碼很是簡潔。
Grappelli 是 Django admin 管理界面的皮膚,提供了更友好的使用體驗。
pip install django-grappelli
複製代碼
使用也很簡單。
配置一下 installed_app
INSTALLED_APPS = (
'grappelli',
'django.contrib.admin',
)
複製代碼
添加路由
urlpatterns = [
path('grappelli/', include('grappelli.urls')), # grappelli URLS
path('admin/', admin.site.urls), # admin site
]
複製代碼
添加請求上下文處理器
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
複製代碼
而後從新處理一下靜態文件就行了。
python manage.py collectstatic
複製代碼
若是你的 Django 服務須要用到 Celery 來作異步任務,那麼這兩個庫還不錯,因此寫在一塊兒。
django-celery-results
是將 Django 的 ORM 用做 Celery 異步任務的存儲結果,在須要將異步任務的結果長期保存及分析時,能夠用它來存儲到 Django 配置的數據庫中。
pip install django-celery-results
複製代碼
簡單配置
執行數據庫建立
python manage.py migrate django_celery_results
複製代碼
而 django-celery-beat
是將 Celery 的定時任務配置轉移到 Django 的數據庫中存儲,若是咱們業務的管理後臺須要定製定時任務,很是好用。
pip install django-celery-beat
複製代碼
簡單配置
執行數據庫建立
python manage.py migrate
複製代碼
最後在啓動 Celery Beat 的時候指定 scheduler
celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
複製代碼
今天先寫這麼多了,這些都是這幾年 Django 開發積累下來的精選庫,若是你們使用中有任何疑問,歡迎評論,找我討論。若是個別庫使用人數多的話,能夠再寫篇詳細使用及避坑指南。若是以爲有用,千萬不要吝惜點贊收藏哦!
我是火眼君,願個人寫做,驅散心靈的孤單。