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 开发积累下来的精选库,若是你们使用中有任何疑问,欢迎评论,找我讨论。若是个别库使用人数多的话,能够再写篇详细使用及避坑指南。若是以为有用,千万不要吝惜点赞收藏哦!
我是火眼君,愿个人写做,驱散心灵的孤单。