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帮助我们简单的实现这个功能,并内部扩展了更多功能.

三  序列化

# api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把**数据转换格式**

# 序列化 : 把我们识别的数据转换成指定的格式提供给别人。

例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。

# 反序列化 : 把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。

四  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的路由列表中