7.9.2DRF初体验
(1)序列化和反序列化提示
1)在序列化和反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的
2)在开发REST接口的视图时,虽然每个视图具体操作的数据不用,但增删改查的实现流程基本套路化,所以这部分代码是可以复用简化编写的
- 增:校验请求数据—>执行反序列化过程—>保存数据库—>将保存的对象序列化并返回
- 删:判断要删除的数据是否存在—>执行数据库删除
- 改:判断要修改的数据是否存在—>校验请求的数据—>执行反序列化过程—>保存数据库—>将保存的对象序列化并返回
- 查:查询数据库—>将数据序列化并返回
3)DRF将序列化和反序列化的业务逻辑进行了封装。程序员只需要将序列化和反序列化的数据传给DRF即可
(2)DRF作用
Django REST framework可以帮助我们简化序列化和反序列化部分的代码编写,大大提高REST接口的开发速度
(3)DRF的特点
- 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
- 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
- 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
- 多种身份认证和权限认证方式的支持;
- 内置了限流系统;
- 直观的 API web 界面;
- 可扩展性,插件丰富
(4)DRF安装和配置
1)DRF环境依赖
- python(2.7,3.2,3.3,3.4,3.5,3.6)
- Django(1.10,1.11,2.0)
2)安装DRF
pip install djangorestframework
3)注册rest_framework应用
在settings.py中的INSTALLED_APPS中添加'rest_framework',
(5)DRF初体验
1)创建序列化器
from rest_framework import serializers
from .models import BookInfo
class BookInfoModelSerializer(serializers.ModelSerializer):
"""图书模型序列化器"""
class Meta:
model = BookInfo
fields = '__all__'
2)编写视图函数逻辑
from rest_framework.viewsets import ModelViewSet
from .models import BookInfo
from .serializers import BookInfoModelSerializer
class BookInfoViewSet(ModelViewSet):
"""使用DRF实现增删改查的后端API"""
# 指定查询集
queryset = BookInfo.objects.all()
# 指定序列化器
serializer_class = BookInfoModelSerializer
3)定义路由
from rest_framework.routers import DefaultRouter
from . import views
urlpatterns = []
# 创建路由对象
router = DefaultRouter()
# 将视图注册到路由
router.register(r'books',views.BookInfoViewSet)
# 视图集路由添加到urlpatterns
urlpatterns += router.urls
4)运行测试