DRF上手即用简易教程
DRF框架使用流程
一 API接口
API接口即接口设计规范,主流接口架构:RESTful , RPC
二 RESTful架构的接口响应规范
基本接口:
也是设计的目的即数据结构如下图:
- GET/books 返回资源对象的列表:列表套字典json [{},{},{}]
- GET/books/ID 返回单个资源对象:字典json {}
- POST/books 创建并返回新对象:字典json {}
- PUT/books/ID 更新并返回对象:字典json {}
- DELETE/books/ID 删除并返回空字符串
正常情况下,我们能够在django中用代码自己实现这样的数据结构实现前后台的沟通,但是代码较多,DRF帮助我们简单的实现这个功能,并内部扩展了更多功能.
HTTP动词
常用的HTTP动词有四个(括号里对应的是SQL命令)
- GET(SELECT) : 从服务器取出资源(一项或多项)
- POST(CREATE) : 在服务器新建一个资源
- PUT(UPDATE) : 在服务器更新资源(客户端提供改变后的完整资源)
- DELETE(DELETE) : 从服务器删除资源
还有三个不常用的HTTP动词:
- PATCH(UPDATE) : 在服务器更新资源(客户端提供改变的属性)
- HEAD : 获取资源的元数据
- OPTIONS : 获取信息,关于资源的哪些属性是客户端可以改变的
过滤信息(filtering)
如果记录数量很多,服务器不可能一次性将数据返回给用户.API接口提供参数,过滤返回结果.
1 2 3 4 5 | ?page = 10 指定返回的页面 ?offset = 10 指定返回记录的开始位置 ?page = 2 &per_page = 100 指定返回第几页,并在页面上显示多少记录数 ?sortby = name&order = asc 指定返回结果按照哪个属性排序,以及排序顺序 ?animal_type_id = 1 指定筛选条件 |
状态码:
1 2 3 4 5 6 7 8 9 10 11 12 | 200 ok : 服务器成功返回用户请求的数据 201 created : 用户新建或修改数据成功 202 accepted : 表示一个请求已经进入后台排队(异步任务) 204 no content : 用户删除数据成功 400 invalid request : 用户发出的请求有误,服务器没有新建或修改数据的操作 401 unauthorized : 表示用户咩有权限(令牌,用户名,密码错误) 403 forbidden : 表示用户得到授权,但是访问是被禁止的 404 not found : 用户发出的请求针对的是不存在的记录,服务器没有进行操作 406 not acceptable : 用户请求的格式不对(比如用户请求json格式,但是只有xml格式) 410 gone : 用户请求的资源被永久删除 422 unprocesable entity : 当创建一个对象时,发生一个验证错误 500 internal server error : 服务器发生错误,用户无法判断发出的请求是否成功 |
三 序列化
四 Django RestFramework(DRF)
# 核心思想: 缩减编写api接口代码
# 建立在Django基础之上的Web应用开发框架. 可以快速开发的REST API接口应用.
# 在 REST framework 中, 提供了序列化器Serializer的定义方法,简化序列化的过程
# 还提供丰富的类视图、扩展类、视图集来简化视图的编写工作.
# REST framework 还提供了:认证 , 权限 ,过滤 ,分页 ,接口文档等功能支持.
本文只介绍DRF的最精简的架构使用流程,
仅仅包含DRF的APIView组件 , 序列化组件 , 解析器组件
五 简易流程
### 序列化器 # 如有子应用,可以在子应用中创建seriaizers.py用于保存序列化器 # 创建序列化器类,后面会在视图函数中调用 from rest_framework import serializers from .models import Student class StudentModelSerializer(serializers.ModelSerializer): class Meta: model = Student fields = "__all__" # model 指定序列化器处理的数据字段从模型类Student参考生成 # fields 指明该序列化器包含模型类中的哪些字段 'all' 全字段 # serializers有serializers.ModelSerializer还有serializers.Serializer多种序列化器类 |
### 视图函数 views.py from rest_framework.viewsets import ModelViewSet from .models import Student from .serializers import StudentModelSerializer # Create your views here. class StudentViewSet(ModelViewSet): # 查询 模型数据 queryset = Student.objects. all () # 指定 序列化器类 serializer_class = StudentModelSerializer # queryset 指名该视图集在查询数据时使用的查询集,固定参数名 # serializer_class 指明该视图在进行序列化反序列化使用的序列化器,固定参数名 |
### 路由定义 from . import views from rest_framework.routers import DefaultRouter # 路由列表 urlpatterns = [] router = DefaultRouter() # 可以处理视图的路由器 router.register( 'students' , views.StudentViewSet) # 向路由器中注册视图集 urlpatterns + = router.urls # 将路由器中的所以路由信息追到到django的路由列表中 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通