首页 > 其他分享 >1004.Django项目用户功能之关联序列化及访问限流

1004.Django项目用户功能之关联序列化及访问限流

时间:2023-05-25 14:33:53浏览次数:33  
标签:班级 展示 py 信息 Django 限流 学生 序列化

一、路由器

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

相关文章

  • django之对FileField字段的upload_to的设定
       用django开发,经常要处理用户上传的文件,比如user模型里面如果又个人头像的字段ImageField等等,而django在FielField字段(包括ImageField)的支持和扩展是做的很好的,首先一个问题,是上传的文件,django是放到哪里去了,(note:文件流是不会放到数据库里面的,该字段在数据库中只存储路......
  • Java序列化和反序列化
    序列化和反序列化的定义*Java序列化就是指把Java对象转换为字节序列的过程*Java反序列化就是指把字节序列恢复为Java对象的过程。 以下是我们常见的一行代码:privatestaticfinallongserialVersionUID=1L;关于这行代码,这是java源码中的一段话:如果可序列化类没有显......
  • django使用mysql数据库
    1、启动/停止mysqlnetstartmysql80netstopmysql802、登录mysqlmysql-uroot-ppassword3、创建数据库/databasecreatdatabaseday10DEFAULTCHARSETutf8COLLATEutf8_general_ci;4、pycharm设置使用mysql,在settings中添加如下代码1DATABASES={2......
  • django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件
    django配置文件作用:    drf登录功能:view内:from.modelsimportUserInfo,UserTokenfromrest_framework.viewsetsimportViewSetimportuuidfromrest_framework.responseimportResponsefromrest_framework.decoratorsimportactionclassUser......
  • 简单接口限流能力实现
    使用AOP注解方式在controller接口上实现的请求接口限流一:核心逻辑packagecom.simple.common.aop;importcom.simple.common.model.ErrorCode;importcom.simple.common.model.OperationRateLimit;importcom.simple.common.model.ServiceException;importcom.simple.comm......
  • Django 路由分发
    Django路由分发当一个url请求过来之后1、先到项目主目录下的urls内。2、由这个url做处理分发给其他app内的urls。一级路由:主目录urls内引入includefromdjango.conf.urlsimporturl,includeurlpatterns=[#指定分发的app目录名称url(r'^cmdb/',include("app0......
  • 基于django前端页面动态菜单
    1、settings中定义基于中间件变量的字典UNICOM_MENU={'leader':[{'text':'用户管理','url':'/xx/xx/'},{'text':'订单管理','url':'/xx/xx/'},{'text......
  • 自定义注解实现数据序列化时进行数据脱敏(基于springboot默认jackjson)、消息转换器
    消息转换器fastjson与jackjson问题在springboot中使用fastjson的@jsonField无效原因:在springboot默认有json(jackjson)解析工具,所以使用fastjson不会生效解决方案替换默认的解析工具(笔者不推荐,这里根据自己项目决定)fastjson替换默认的jackjson第一种方法bean方法packagecom......
  • 【web 开发】PHP8中数组的序列化和反序列化
    前言数组的序列化(serialize)用来将数组的数据转换为字符串,以方便传递和数据库的存储。与之相对应的操作就是反序列化(unserialize),把字符串数据转换为数组加以使用。数组的序列化主要通过serialize()函数来完成。字符串的反序列化主要通过unserialize()函数来完成。对象的序列化与反序......
  • php反序列化逃逸
    之前就对字符串逃逸这一块理解的不是很深刻,下面通过一位师傅的博客来进一步深入理解一下有关php字符串逃逸的相关内容。贴上师傅的博客地址:https://blog.csdn.net/qq_45521281/article/details/107135706先来说一下什么是字符串逃逸,就是我们可以构造一些恶意代码,让其在反序列化......