目录
1.RESTful概念:
2.RestFul 规范建议
1.API与用户的通信协议,总是使用HTTP协议
2.域名
3.版本
4.面向资源编程
5.method
常见的http请求方法
对应增删改查操作
6.过滤,分页,排序
7.状态码
常见的http请求状态码
3.使用APIView
DRFT特点:
view使用
APIView使用
ModelViewSet使用
获取参数
序列化器(serializers.ModelSerializer)
序列化器(serializers.Serializer)
1.RESTful概念:
REST与技术⽆关,代表的是⼀种软件架构⻛格(REST是Representational State Transfer的简称,中⽂翻译为“表征状态转移”)
REST从资源的⻆度类审视整个⽹络,它将分布在⽹络中某个节点的资源通过URL进⾏标识
所有的数据,不过是通过⽹络获取的还是操作(增删改查)的数据,都是资源,将⼀切数据视为资源REST区别与其他架构⻛格的最本质属性
1.web开发本质
对数据库中的表进⾏增删改查操作
Restful⻛格就是把所有数据都当做资源,对表的操作就是对资源操作
在url同通过 资源名称来指定资源
通过 get/post/put/delete/patch 对资源的操作
2.RestFul 规范建议
-
1.API与用户的通信协议,总是使用HTTP协议
-
2.域名
1.API与用户的通信协议,总是使用HTTP协议
2.域名
1)子域名方式
http://api.example.com
http://www.example.com
2)url方式
http://.example.org
http://example.org/api/
-
3.版本
URL,如:https://api.example.com/v1/
请求头 跨域时,引用发送
-
4.面向资源编程
https://api.example.com/vi/zoos
https://api.example.com/vi/animals
https://api.example.com/vi/employees
-
5.method
常见的http请求方法
get 获取资源【查询数据】:从服务器取出资源
post 提交数据【创建数据】:在服务器新建一个资源
put 修改数据【修改数据】(要确定修改的对象,获取要修改的对象的id):在服务器更新资源客户端提供改变后的完整资源
delete 删除资源【删除数据】,(要确定删除的对象):从服务器删除资源
patch:修改属性:在服务器更新资源客户端提供改变的属性
对应增删改查操作
head:获取资源的元数据
option:获取信息,关于资源哪些属性是客户端可以改变的
patch:在服务器更新资源
-
6.过滤,分页,排序
http://api.example.com/vl/zoos?limit=10:指定返回记录的数量
http://api.example.com/vl/zoos?offset=10:指定返回记录的开始位置
http://api.example.com/vl/zoos?page=2&per_page=100:指定第几页,以及眉页的记录数
http://api.example.com/vl/zoos?sortby=name&order=asc:返回结果按照哪个属性排序,以及排序顺序animal_type_id=1:指定筛选条件
http://api.example.com/vl/zoos?
-
7.状态码
常见的http请求状态码
200 成功
201 创建和修改成功
202 一个任务进入队列,一个请求进入后台排队
204 删除成功
301 永久重定向
302 临时重定向
400 请求的数据是坏的
401 没有权限,认证失败
403 认证失败,访问时被禁止的
404 请求页面不存在(路由错误)
405 请求方式不正确,本应是get而发送了post请求,就会提示405
406 用户请求的资源不可能
410 用户请求的资源被永久删除
422 当创建一个对象,发生验证错误
500 服务器内部错误
501 服务器不支持请求功能,无法完成请求
3.使用APIView
DRF框架:drf框架是基于Django框架,用于快速构建Web RESTful API的工具。
1:序列化:将对象转化成“串行化”数据形式。
DRF: 模型类对象—> 字典----> json数据
2:反序列化: 将"串行化"数据转换成对象。
DRF : json字符串 —>字典—> 数据校验(产生有效数据)—> 模型类对象
DRFT特点:
-
提供定义序列化器Serializer的方法,可以快速根据Django ORM或者其他库自动序列化、反序列化
-
提供丰富的类视图、MIXIN扩展类,根据需求组合继承,简化视图的编写
-
丰富的定制层级:函数试图,类试图,试图集合到自动生成API,满足各种需求
-
支持多种身份认证和权限认证方式
-
内置了限流系统
-
可视化AOI接口
-
可扩展性,插件丰富
提供定义序列化器Serializer的方法,可以快速根据Django ORM或者其他库自动序列化、反序列化
提供丰富的类视图、MIXIN扩展类,根据需求组合继承,简化视图的编写
丰富的定制层级:函数试图,类试图,试图集合到自动生成API,满足各种需求
支持多种身份认证和权限认证方式
内置了限流系统
可视化AOI接口
可扩展性,插件丰富
视图封装:DRF统一封装了请求的数据为request.data以及返回数据Response方法
序列化器:DRF提供序列化器可以统一便捷地进行序列化及反序列化工作
认证:对用户权限进行认证,超级用户,普通用户,匿名用户
限流:对访问的用户流量进行限制,减轻接口的访问压力
过滤:可以对列表数据进行字段过滤,并可以通过添加django-fitlter扩展来增强支持
排序:来帮助我们快速指明数据按照指定字段进行排序
分页:可以对数据集进行分页处理
异常处理:*DRF*提供了异常处理,我们可以自定义异常处理函数
接口文档生成:*DRF*还可以自动生成接口文档
DRF官方文档
中文文档: Home - Django REST framework 中文站点
英文文档: Home - Django REST framework
view使用
from rest_framework.views import APIView from rest_framework.response import Response
APIView使用
from rest_framework.views import APIView from rest_framework.response import Response
ModelViewSet使用
from rest_framework.viewsets import ModelViewSet
获取参数
# get
data = request.query_params
# post
data = request.data
序列化器(serializers.ModelSerializer)
class Ser(serializers.ModelSerializer):
class meta:
model = 表名
fields = '__all__'
序列化器(serializers.Serializer)
class StuSer(serializers.Serializer):
字段名= serializers.IntegerField()
字段名= serializers.CharField(max_length=64, required=True)
字段名= serializers.IntegerField(default=18)
字段名= serializers.CharField(default='中国', max_length=64)
字段名= serializers.CharField(max_length=64)
# 创建
def create(self, validated_data):
return 表名.objects.create(**validated_data)
# 修改
def update(self, instance, validated_data): instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名') instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名')
instance.save()
return instance
from rest_framework.views import APIView from rest_framework.response import Response
ModelViewSet使用
from rest_framework.viewsets import ModelViewSet
获取参数
# get
data = request.query_params
# post
data = request.data
序列化器(serializers.ModelSerializer)
class Ser(serializers.ModelSerializer):
class meta:
model = 表名
fields = '__all__'
序列化器(serializers.Serializer)
class StuSer(serializers.Serializer):
字段名= serializers.IntegerField()
字段名= serializers.CharField(max_length=64, required=True)
字段名= serializers.IntegerField(default=18)
字段名= serializers.CharField(default='中国', max_length=64)
字段名= serializers.CharField(max_length=64)
# 创建
def create(self, validated_data):
return 表名.objects.create(**validated_data)
# 修改
def update(self, instance, validated_data): instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名') instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名')
instance.save()
return instance
# get data = request.query_params # post data = request.data
序列化器(serializers.ModelSerializer)
class Ser(serializers.ModelSerializer):
class meta:
model = 表名
fields = '__all__'
序列化器(serializers.Serializer)
class StuSer(serializers.Serializer):
字段名= serializers.IntegerField()
字段名= serializers.CharField(max_length=64, required=True)
字段名= serializers.IntegerField(default=18)
字段名= serializers.CharField(default='中国', max_length=64)
字段名= serializers.CharField(max_length=64)
# 创建
def create(self, validated_data):
return 表名.objects.create(**validated_data)
# 修改
def update(self, instance, validated_data): instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名') instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名')
instance.save()
return instance
class StuSer(serializers.Serializer):
字段名= serializers.IntegerField()
字段名= serializers.CharField(max_length=64, required=True)
字段名= serializers.IntegerField(default=18)
字段名= serializers.CharField(default='中国', max_length=64)
字段名= serializers.CharField(max_length=64)
# 创建
def create(self, validated_data):
return 表名.objects.create(**validated_data)
# 修改
def update(self, instance, validated_data): instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名') instance.字段名= validated_data.get('字段名')
instance.字段名= validated_data.get('字段名')
instance.save()
return instance



