drf常用功能
主流认证方式
主流认证方式:
-
Session
-
Token
-
JWT
主流认证方式:Session认证
主流认证方式:Token认证
主流认证方式:JWT认证
DRF认证
DRF认证与权限
目前DRF可任意访问,没有任何限制,是不符合生产环境标准的,因此接下来学习认证实现访问控制。
DRF支持四种认证方式:
-
BasicAuthentication:基于用户名和密码的认证,适用于测试
-
SessionAuthentication:基于Session的认证
-
TokenAuthentication:基于Token的认证
-
RemoteUserAuthentication:基于远程用户的认证
DRF支持权限:
-
IsAuthenticated:只有登录用户才能访问所有API
-
AllowAny:允许所有用户
-
IsAdminUser:仅管理员用户
-
IsAuthenticatedOrReadOnly:登录的用户可以读写API,未登录用户只读
DRF认证:Session认证
DRF认证:Token认证
默认的obtain_auth_token视图返回的数据是比较简单的,只有token一项,如果想返回更多的信息, 例如用户名,可以重写ObtainAuthToken类的方法实现:
限流
可以对接口访问的频率进行限制,以减轻服务器压力。
应用场景:投票、购买数量等
过滤
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。
文档:https ://www.django-rest-framework.org/api-guide/filtering/
安装:
pip install django-filter |
添加APP:
INSTALLED_APPS = [ |
添加DRF配置:
REST_FRAMEWORK = { |
在视图中指定过滤的字段:
测试:http://127.0.0.1:8001/myapp_api/api/user?name=阿哲
搜索和排序
DRF提供过滤器帮助我们快速对字段进行搜索和排序。
搜索测试:http://127.0.0.1:8001/myapp_api/api/user?search=阿哲
排序测试:http://127.0.0.1:8001/myapp_api/api/user?ordering=id
注:默认是正序排列,字段前面加横杠(例如-id)表示倒序排列
分页
分页是数据表格必备的功能,可以在前端实现,也可以在后端实现,为了避免响 应数据过大,造成前端压力,一般在后端实现。
REST_FRAMEWORK ={ |
默认分页器灵活度不高,例如不能动态传递每页条数,可以通过重写 PageNumberPagination类属性改变默认配置。
myapp_api/pagination.py
DRF配置指定模块路径:
测试:http://127.0.0.1:8001/myapp_api/api/user?page_num=2&page_size=3
自动生成接口文档
由于项目开发经验欠缺或着急上线,需求不断改动,项目设计阶段定义的接口已经面目全非,这给 前端开发人员参考带来一定困难,如何改善这个问题呢?
Swagger来了,它是一个应用广泛的REST API文档自动生成工具,生成的文档可供前端人员查看。
文档参考:https ://django-rest-swagger.readthedocs.io/en/latest/
安装:
pip install django-rest-swagger |
添加APP:
INSTALLED_APPS = [ |
DRF配置:
REST_FRAMEWORK = { |
URL路由:
from rest_framework_swagger.views import get_swagger_view |