这是我参与更文挑战的第13天,活动详情查看: 更文挑战
1 什么是drf?
在python
项目开发中,前后端分离的技术框架越来越成熟,在前后端进行通信时,通常需要用统一的格式进行通信,目前应用比较广泛的是RESTful API
。那后端如何快速编写基于Django的RESTful API呢?本篇将主要介绍使用DjangoRestFramework(drf)
框架来快速开发符合REST风格的API。
2 为什么用drf?
- 提供了可视化的API调试界面,开发者可以在线测试接口
- 可以根据需求来选择常规视图功能或更高级的功能
- 不用自己写大量的CRUD接口了,简单配置即可
- 支持ORM(对象映射关系)和非ORM的数据序列化
# 安装drf
pip install djangorestframework
# 具体功能在具体模块下
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.exceptions import APIException
from rest_framework.filters import OrderingFilter
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination
from rest_framework.settings import APISettings
# 注册drfapp
INSTALLED_APPS = [
...
'rest_framework',
]
as_view: 就干了一件事,禁用csrf认证
三大认证任务分析
- **认证模块:**校验用户是是否登陆
self.perform_authentication(request)
- **权限模块:**校验用户是否拥有权限
self.check_permissionsn(request)
- **节流模块:**访问接口的次数在设定的时间范围内是否过快(配置访问频率、缓存计次、超次后需要等待的时间)
self.check_throttles(request)
3 Django请求生命周期
-
前端发送请求
-
wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask、Django)
-
中间件处理请求,帮助我们对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session
-
路由匹配,根据当前请求的URL找到视图函数,如果是FBV写法,通过判断method两类型,找到对应的视图函数;如果是CBV写法,匹配成功后会自动去找dispatch方法,然后Django会通过dispatch反射的方式找到类中对应的方法并执行
-
视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、view视图将数据渲染到template模板
-
视图函数执行完毕之后,会把客户端想要的数据返回给dispatch方法,由dispatch方法把数据返回经客户端
-
中间件处理响应
-
wsgi,将响应的内容发送给浏览器
-
浏览器渲染
4 drf请求生命周期
前端发送请求 --> Django的wsgi --> 中间件 --> 路由系统_执行CBV的as_view(),就是执行内部的dispath方法 --> 在执行dispath之前,有版本分析和渲染器 --> 在dispath内,对request封装 --> 版本 --> 认证 --> 权限 --> 限流 --> 通过反射执行视图函数 --> 如果视图用到缓存( request.data or request.query_params )就用到了 解析器 --> 视图处理数据,用到了序列化(对数据进行序列化或验证) --> 视图返回数据可以用到分页