Django REST framework

前言

1.在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。
2.在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:

  • :校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
  • :判断要删除的数据是否存在 -> 执行数据库删除
  • :判断要修改的数据是否存在 -> 校验请求的数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
  • :查询数据库 -> 将数据序列化并返回

Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。通常简称为DRF框架 或 REST framework。

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

安装环境与配置

DRF需要依赖:

  • Python 2.7以上版本
  • Django 1.10以上版本
    DRF是Django的扩展应用,所以需要依赖Django环境,需要首先安装有Django
1.安装DRF

pip install djangorestframework


2.添加rest_framework应用

在创建的Django项目setting.py文件中的INSTALLED_APPS中添加‘rest_framework’

INSTALLED_APPS = [
...
'rest_framework',
]


DRF案例(图书案例)

1.编写视图

在books应用的views.py文件中创建视图BookInfoViewSet,这是一个视图集合

from rest_framework.viewsets import ModelViewSet
from .serializers import BookInfoSerializer
from .models import BookInfo

class BookInfoViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
  • queryset 指明该视图集在查询数据时使用的查询集
  • serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器

2.创建序列化器

在books应用中新建serializers.py用于保存该应用的序列化器。
创建一个BookInfoSerializer用于序列化与反序列化。

class BookInfoSerializer(serializers.ModelSerializer):
    """图书数据序列化器"""
    class Meta:
        model = BookInfo
        fields = '__all__'
  • model 指明该序列化器处理的数据字段从模型类BookInfo参考生成
  • fields 指明该序列化器包含模型类中的哪些字段,'all'指明包含所有字段

3.定义路由

在books应用的urls.py中定义路由信息。

from . import views
from rest_framework.routers import DefaultRouter

urlpatterns = [
    ...
]

router = DefaultRouter()  # 可以处理视图的路由器
router.register(r'books', views.BookInfoViewSet)  # 向路由器中注册视图集,不要写成books/, 否则会路由错误

urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中

4.运行

运行当前程序(与运行Django一样)

python manage.py runserver

5.Json乱码解决

在DRF web 界面返回json数据类型时,有些浏览器是乱码。这是因为DRF 默认返回的JSONRenderer类,没有设置chartset='utf-8', 所以为了解决这个问题我们可以重写JSONRenderer类。
项目的根目录下创建render.py

from rest_framework.renderers import JSONRenderer as DRF_JSONRenderer

   class JSONRenderer(DRF_JSONRenderer):
        charset='utf-8'

注意: 不影响使用的,可以不用重写。


你可能感兴趣的:(Django REST framework)