drf

本文深入解析Django REST framework(DRF)的运用,强调其在前后端分离开发中的优势,详细阐述RESTful API的设计规范,包括数据安全保障、接口特征表现、多数据版本共存等原则。同时,文章介绍了DRF在序列化、反序列化过程中的简化方法,以及如何通过序列化器Serializer快速处理数据转换,提供丰富的类视图和视图集简化开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drf 全称 Django REST framework 属于前后端分离的一种,与django最大的区别也在于此!!
前后端分离

前后端分离
前后端不分离前后端不分离

RESTful API

drf编写的规范是以restful API为基础构造的,按我的理解来说就是只要满足restfulAPI的第五条也就是不同的请求方式代表不同的方法,那么此程序就是属于符合restfulAPI规范的!
具体的规范为

  1. 数据的安全保障
    简单来说就是采用https协议来传输数据
  2. 接口特征表现
    如果该接口为前后端交互的或者资源互换的应该用api关键字标识接口url
    例如:
    https://api.baidu.com/
    https://www.baidu.com/api
  3. 多数据版本共存
    这个没什么好说的,就是不同的版本
    https://api.baidu.com/v1
    https://api.baidu.com/v2
  4. 数据即是资源,均使用名词(可复数)
    一般来说在url不会出现动词,因为这样有可能会暴露一些信息
    例如:
    https://api.baidu.com/users
    https://api.baidu.com/books
    https://api.baidu.com/book
  5. 资源操作由请求方式决定(method)
    不同的请求对应不同的操作。
    在drf中我知道的有5种
    1.get请求代表获取资源(单个或者全部)
    2.post请求代表创建新增
    3.put请求代表修改整个数据
    4.patch请求代表修改部分数据
    5.delete请求代表删除
  6. 过滤,通过在url上传参的形式传递搜索条件
    就是查找对应的数据,通常使用get请求获取资源
  7. 响应状态码
    1. 1XX(资源请求成功正在获取)
    2. 2XX(正常相应)
      200(常规请求)
      201(创建成功)
    3. 3XX(重定向)
      301(永久重定向)
      302(暂时重定向)
    4. 4XX(客户端异常)
      403(请求无权限)
      404(请求路径不存在)
      405(请求方法不存在)
    5. 5XX(服务端异常)
      500(服务器异常)
  8. 错误处理,应返回错误信息,error当做key
    {
    error: “无权限操作”
    }
  9. 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范
    GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回一个空文档
    10.需要url请求的资源需要访问资源的请求链接
{
  	"status": 0,
  	"msg": "ok",
  	"results":[
        {
            "name":"肯德基(罗餐厅)",
            "img": "https://image.baidu.com/kfc/001.png"
        }
      	...
		]
}

序列化

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

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

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

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

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

Django Rest_Framework

核心思想: 缩减编写api接口的代码

Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。REST framework提供了一个API 的Web可视化界面来方便查看测试接口。

特点

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持;
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富

序列化器
在序列器中有两种序列化器。一种为serializers.Serializer,另一种为serializers.ModelSerializer。对于这个两个区别可以去看我从别人那转载过来的另一篇博客!

class BookSerializer(serializers.Serializer):
    user=serializers.CharField()
    password=serializers.CharField()
    re_password=serializers.CharField()  

在序列化器中定义的字段其实可以和django中的forms组件相对应起来!
例如:
序列化组件修改数据
max_length 最大长度
min_lenght 最小长度
allow_blank 是否允许为空
trim_whitespace 是否截断空白字符
max_value 最小值
min_value 最大值
read_only 表明该字段仅用于序列化输出,默认False,如果设置成True,postman中可以看到该字段,修改时,不需要传该字段
write_only 表明该字段仅用于反序列化输入,默认False,如果设置成True,postman中看不到该字段,修改时,该字段需要传
required 表明该字段在反序列化时必须输入,默认True
default 反序列化时使用的默认值
allow_null 表明该字段是否允许传入None,默认False
validators 该字段使用的验证器
error_messages 包含错误编号与错误信息的字典
公共用法
钩子函数
在这里跟django用法差不多,只是定义的方法名还有返回错误的信息不一样!

局部钩子
def validate_price(self, data):   # validate_字段名  接收一个参数
       if float(data)>10:
           return data    #拿来必定要回去
       else:
           raise ValidationError('价格太低')   #相当于django的self.add_errors()
全局钩子
def validate(self, validate_data):   # 全局钩子
       password=validate_data.get('password')
       re_password=validate_data.get('re_password')
       if password != re_password:
           raise ValidationError('两次密码不一致')
       else:
           return validate_data
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值