1113.DRF

发布时间 2023-06-08 13:00:41作者: 興華

一、路由器

1. SimpleRouter

该路由器包括标准集合:list,create,retrieve,update,partial_update和destroy动作的路由。视图集中还可以使用@detail_route或@list_route装饰器标记要被路由的其他方法。

2. DefaultRouter

这个路由器类似于上面的SimpleRouter,但是还包括一个默认返回所有列表的超链接的API根视图。它还生成可选的.json样式格式后缀的路由。

二、逻辑删除

1. 逻辑删除概述

逻辑删除:删除并不是真正的做删除,而是进行逻辑删除,逻辑删除的数据也应该无法查询、获取,所以需要对代码进行修改。

2. 实现

三、关联序列化

1. StringRelatedField

将关联模型的__str__方法返回值序列化出来。

2. source

序列化器增加一个字段引入另外一个模型的字段数据。

3. 序列化器嵌套(反序列化)

序列化器增加一个字段引入另外一个模型的字段数据,显示关联序列化器的所有字段数据嵌入。

四、拓展

1. 视图集新增额外功能

默认只为标准的增删改查行为生成了路由信息,如果想昂自定义的行为也生成路由需要再定义行为上使用action装饰器。

2. 限流

可以对接口访问频次进行限制,以减轻服务器压力。可以使用second、minute、hour、day来指明周期。

五、RESTful

1. 请求与响应

2. 概述

3. 设计规范

RESTful设计风格:一种接口设计规范,解决不同开发人员按照自己习惯与风格开发出来的接口差异性。

请求方式:

GET:SELECT从服务器获取资源;

POST:CREATE  POST:给服务器提交资源;

PUT:UPDATE 请求中的负载创建或者替换目标资源;

DELETE:DELETE删除资源。

请求地址:

例如学生管理系统:我们需要对学生进行增删改查,每个操作都需要提供对应的api接口。

请求方法

请求地址

后端操作

响应

GET

/students

获取所有学生

数组

POST

/students

增加学生

创建的对象

GET

/students/1

获取id为1的学生

单个对象

PUT

/students/1

修改id为1的学生

修改后的对象

DELETE

/students/1

删除id为1的学生

状态码:

六、DRF项目初始

1. DRF概述

DRF(Django Rest Framework)一个内置在jdango里面的子应用,可以快速开发REST API接口应用,就是一个Django插件或者说是拓展。

直接在虚拟环境中执行以下命令:

pip install djangorestframework   

配置作者信息:File-->Editor-->file and Code Templates-->Python Script.

mysql安装以及信息配置,此处采用远程文件配置,而非srttings.py中直接配置,有效的保护个人信息。

Mysql数据库:虚拟环境采用超级账户进入mysql后,创建一个新账号,用于专门管理该项目下数据库数据。

2. 日志器

用于记录系统运行过程中的各种日志信息,在项目根目录中创建一个logs文件夹,用于存放日志文件。

3. APP项目结构

APP统一管理文件夹配置。

七、序列化器

1. Serializer

序列化器:本质就是一个类,和模型类差不多的类,用于JSON与模型对象爱你互转以及效验数据。

from rest_framework import serializers

class MySerializer(serializers.Serializer):
	pass

序列化器字段名和模型字段名必须一致;

序列化器字段可以和模型字段个数不一致;

如果少于模型字段,则没有的字段不会进行显示;

其中就是定义:需要传入哪些字段数据,需要返回哪些字段数据。

2. ModeSerializer

Drf给我们提供了Serializer的子类ModeSerializer,Serializer能做的事情ModeSerializer都能做,并在基础上进行了拓展。

from rest_framework import serializers

class MySerializer(serializers.ModelSerializer):
	class Meta:
		model = student
		fields = ‘__all__’

ModeSerializer可以根据模型自动生成序列化器中的字段并帮我们实现create和update方法。

修改映射字段:extra_kwargs

在class Meta中使用extra_kwargs属性来修改映射字段的属性:

extra_kwargs = {

      '字段': { '属性': 值}  

    }

3. 额外效验逻辑

① 属性级别的效验:在序列化器中定义方法,方法名为validate_属性名(self,value)会自动将该属性的值传入value参数;

② 对象级别的验证:需要访问多个字段的验证时需要使用对象级别的验证,定义validate(self, data)方法,会自动将传入进来的所有数据传入data参数,data是一个字典。

4. 使用

实例化序列化器:使用序列化器就是实例化这个序列化器类,创建序列化器对象,初始化函数里面有两个参数,Instance:传入模型、查询集、字典;Data:传入要反序列化的数据。

八、视图集

1. 视图集

Django REST framework允许将一组相关视图的逻辑组合在单个类称为(ViewSet)中。ViesSet只是一种基于类的视图,它不提供任何方法处理程序,如get()或post(),而是提供诸如list()和create()子类的操作,ViewSet的方法处理程序仅适用as_view方法绑定到完成视图的响应操作。

list() 提供一组数据

retrieve() 提供单个数据

create() 创建数据

update() 保存数据

destory() 删除数据

2. ModeViewSet

实现了刚刚的所有方法。只需要定义数据集和序列化器就好了。

class  MyViewSet(ModelViewSet):
	queryset = model.objects.all()
	serializer_class = ModelSerializer