一、路由器
1. SimpleRouter 该路由器包括标准集合——list、create、retrieve、update、partial_update、destroy动作的路由。视图集中还可以使用@detail_route或@list_route装饰器标记要被路由的其他方法;
2. DefaultRouter 这个路由器类似于上面的SimpleRouter,但是还包括一个默认返回所有列表视图的超链接的API根视图。它还生成可选的,json样式格式后缀的路由。
二、逻辑删除
我们并不是要真正的做删除,而是进行逻辑删除,逻辑删除的数据也应该无法查询、获取,所有我们需要对代码进行修改!
1. 修改模型类,在models.py文件中增加is_delete属性,重写delete方法
2. 修改视图集进行数据过滤
models.py重写delete方法,增加is_delete属性
serializers.py定义is_delete为不展示项目
views.py定义is_delete为True的不进行反馈!
三、关联序列化器
在进行关联序列化器作业时,需要将原Students模型类相关的代码以及数据全部删除,如何操作了?
1. 将所有代码中涉及到Students模型类的全部进行注释,然后进行映射并上传;
2. 数据库中查看,即可看到关于students的数据库已经删除!
1. StringRelateField
新增classes模型类
配置相关信息序列化serializer.py,视图集views.py,路由器urls.py
访问classes网页
访问students网页
添加班级信息,学生信息,并给学生分配班级后,但网页显示中并为看到学生信息中班级信息的展示,此时就需要用到关联模型的__str__方法了。
将关联模型的__str__方法返回值序列化出来! 使用方法,在对应关联项的序列化器类中定义: 外键字段=serializer.StringRelateField(read_only=True)
在学生的序列化器中添加班级的展示,再次访问时即可看到学生信息中包含班级信息!
但又出现另外一个问题,就是班级添加栏消失了!如何做到学生信息中展示班级信息,且班级添加修改栏仍然存在了?就要使用到source的方法了!
2. source
序列化器增加一个字段引入另外一个模型的字段数据,使用方法,在对应关联项的序列化器类中定义:新增字段=serializers.CharField(source=‘classes.name’, read_only=True)
将序列化serializer.py文件中学生的序列化进行修改
再次方位学生信息页面是,就可以看到学生信息中包含班级信息,且下方班级添加修改栏仍然存在!
那在学生信息中展示了班级信息,如何在班级信息中展示学生的信息了?就需要用到下面介绍的序列化嵌套了!
3. 序列化器嵌套
在学生关联的班级序列化器中添加以下方法:
访问班级网页,即可看到班级下展示了对应所有学生的信息!但一般并非需要展示学生的所有信息,可以新建一个选择展示器并调用
再次访问班级信息是,即可看到班级信息中学生信息按id、name、age、sex信息进行展示!(我测试未成功,咨询原因中!)
四、拓展
1. 视图集新增额外功能: 默认只为标准的增删改查行为生成了路由信息,如果想让自定义的行为也生成路由,需要在定义行为上使用action装饰器!
例如:查看班级最后一个班级信息
views.py文件中在班级视图集中定义last方法,并确认在使用action装饰前后前端访问情况!
2. 限流Throttling 可以对接口访问的频次进行限制,以减轻服务器压力;可以使用second、minute、hour、day来指明周期。(参考官网Throttling使用方法!)
setting.py文件中添加限流
标签:班级,展示,py,信息,Django,限流,学生,序列化 From: https://www.cnblogs.com/lxinghua/p/17431047.html