数据校验

drf三大认证组件

梦想的初衷 提交于 2019-12-05 18:01:56
目录 一、认证模块工作原理 二、认证模块使用方法 2.1 自定义认证类的实现方法 2.2 通过序列化模块实现登陆,通过认证模块进行校验 三、权限模块使用方法 3.1 系统的权限类 3.2 自定义权限类的实现方法 四、频率模块使用方法 一、认证模块工作原理 源码分析: 首先:在APIView的dispatch中调用了initial方法进行了三大认证 认证模块: 校验用户是否登陆: 登陆用户、非法用户、游客 权限模块 :校验用户是否拥有权限: 校验对象是 登陆用户和游客 频率模块: 访问接口的次数在设定的时间范围内是否过快: def initial(self, request, *args, **kwargs): # 认证模块:校验用户是否登陆: 登陆用户、非法用户、游客 self.perform_authentication(request) # 权限模块:校验用户是否拥有权限: 校验对象是 登陆用户和游客 self.check_permissions(request) # 频率模块:访问接口的次数在设定的时间范围内是否过快: # 配置访问频率,每次访问都要缓存记次,超次后需要等待的事件 self.check_throttles(request) 进入 self.perform_authentication(request) 会发现其中只有一句话 def perform

form组

北城余情 提交于 2019-12-05 17:55:02
一.Form简介 1.form组件的主要功能 1.生成页面可用的HTML标签 2.对用户提交的数据进行校验 3.保留上次输入内容 2.页面显示的步骤 1.views.py中导入forms模块:from django import froms 2.定义继承自forms.Form的类,类中定义字段(和models中的写法相同) 3.视图函数中创建该类的对象 4.如果是get请求,向页面中渲染form对象。 3.简单使用form组件实现的例子 class Regform(forms.Form): # 查看所有字段(forms->fields->查看__all__) """ CharField对应input标签,users、pwd是input标签中的name的值,label对应label标签,widget的值对应input标签的类型 ChoiceField对应select标签,choices中的选项是option的值 """ users = forms.CharField(label="用户名", widget=forms.TextInput) pwd = forms.CharField(label="密码", widget=forms.PasswordInput) choice = forms.ChoiceField(label="性别", choices=((1, "alex"),

第四阶段:DRF day82 DRF--DRF中三大认证中的jwt和频率模块解析

旧街凉风 提交于 2019-12-05 17:40:50
目录 一、昨日内容复习 二、今日内容总结 2.1 jwt认证规则 2.2 jwt模块 2.3 前后台分离模式下信息交互规则 2.4 今日知识点汇总 三、今日练习 练习A 练习B 一、昨日内容复习 """ 1、认证、权限、频率的工作原理 基础哪个类、重写哪个方法、方法的实现体要完成什么事 2、自定义User表 继承AbstractUser、配置AUTH_USER_MODEL、配置admin(UserAdmin密文操作密码) 3、一个需要登录后的群查接口UserList、一个获取LoginAPIView成功的Token 4、LoginAPIView要根据请求的usr、pwd交给序列化类,全局校验得到 user、token 签发token的算法 5、自定义认证类,校验token 校验token的算法 6、自定义权限类 指定权限规则 7、登录接口必须完成所有认证权限局部禁用,权限接口在权限类中局部配置自定义认证权限类(或在全局配置) """ 二、今日内容总结 2.1 jwt认证规则 """ 全称:json web token 解释:加密字符串的原始数据是json,后台产生,通过web传输给前台存储 格式:三段式 - 头.载荷.签名 - 头和载荷才有的是base64可逆加密,签名才有md5不可逆加密 内容: 头(基础信息,也可以为空):加密方式、公司信息、项目组信息、... 载荷(核心信息)

认证-权限-频率组件

送分小仙女□ 提交于 2019-12-05 15:50:35
认证 源码分析 """ # 还是一如既往的dispatch作为入口函数. 1)APIView的dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *args, **kwargs) 进入三大认证 # 认证组件:校验用户 - 游客、合法用户、非法用户 # 游客:代表校验通过,直接进入下一步校验(权限校验) # 合法用户:代表校验通过,将用户存储在request.user中,再进入下一步校验(权限校验) # 非法用户:代表校验失败,抛出异常,返回403权限异常结果 self.perform_authentication(request) # 权限组件:校验用户权限 - 必须登录、所有用户、登录读写游客只读、自定义用户角色 # 认证通过:可以进入下一步校验(频率认证) # 认证失败:抛出异常,返回403权限异常结果 self.check_permissions(request) # 频率组件:限制视图接口被访问的频率次数 - 限制的条件(IP、id、唯一键)、频率周期时间(s、m、h)、频率的次数(3/s) # 没有达到限次:正常访问接口 # 达到限次:限制时间内不能访问,限制时间达到后,可以重新访问 self.check_throttles(request) 3) 认证组件

序列化类

核能气质少年 提交于 2019-12-05 15:44:02
Serializer 序列化准备: 模型层:models.py class User(models.Model): SEX_CHOICES = [ [0, '男'], [1, '女'], ] name = models.CharField(max_length=64) pwd = models.CharField(max_length=32) phone = models.CharField(max_length=11, null=True, default=None) sex = models.IntegerField(choices=SEX_CHOICES, default=0) icon = models.ImageField(upload_to='icon', default='icon/default.jpg') class Meta: db_table = 'user' verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return '%s' % self.name 后台管理层:admin.py from django.contrib import admin from . import models admin.site.register(models.User) 配置层

登录认证

笑着哭i 提交于 2019-12-05 15:29:13
登录认证 一、模型与配置 ​ settings.py # drf配置 REST_FRAMEWORK = { # 渲染模块 'DEFAULT_RENDERER_CLASSES': ['rest_framework.renderers.JSONRenderer'], # 异常模块 # 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler', 'EXCEPTION_HANDLER': 'utils.exception.exception_handler', # 认证模块 'DEFAULT_AUTHENTICATION_CLASSES': [ # 'rest_framework.authentication.SessionAuthentication', # 'rest_framework.authentication.BasicAuthentication', # 自定义认证类 ], # 权限模块 'DEFAULT_PERMISSION_CLASSES': [ # 'rest_framework.permissions.AllowAny', # 'rest_framework.permissions.IsAuthenticated', # 自定义权限类 ], } # 修改auth模块的用户表指向 AUTH_USER

DRF序列化组件

左心房为你撑大大i 提交于 2019-12-05 15:04:48
DRF的序列化组件 首先我们要知道序列化是干嘛的,在此之前我们应该知道json格式的数据,一般在前后端交互或者是跨平台交互的时候,会默认使用Json格式拉进行数据的传输,所以当我们把普通的数据转换成json格式的时候就会使用序列化组件,将其序列化成json格式,然后前端接收到json格式之后,再反序列化把json格式数据转换成普通格式的数据,再进行逻辑运算,判断以及渲染页面等. 而DRF的序列化组件,所完成的功能也是如此,负责将对象数据序列化前台所需要的数据,或者反序列化前台的数据,进行校验,来确保数据的安全. 下面我们就介绍三种DRF中最常用的序列化组件,Serializer,ModelSerializer,以及ListModelSerializer. Serializer组件 在使用Serializer组件之前,我们要先生成一个序列化器,在我们django的项目名(这里我们定义项目名为api)下面新建一个serializer.py文件,在里面继承serializers,生成序列器,供我们在视图函数里面调用: #/api/models.py from django.db import models class User(models.Model): CHOICES_SEX = ((0, '男'), (1, '女')) name = models.CharField(max

自定义颜色显示填报时校验出错的数据

梦想的初衷 提交于 2019-12-05 14:21:45
润乾填报表可以设定数据提交前的校验规则,不满足规则的数据,除了可以弹出提示信息外,还可以在填报数据的页面以特殊颜色标识出错数据,默认使用红色,当然也可以根据需要自定义颜色。 首先我们看一下设置校验后,数据出现错误后的效果。 以报表设计器下自带的 7.1.sht 为例,我们在 H3 单元格添加了校验规则:工资不能大于 1.2W。 在页面上我们对数据进行修改,当鼠标光标失去焦点后,就会弹出提示并标红刚刚修改的不符合规则的数据,效果如下图所示: 如果用户想换用别的标注方式,可以在 jsp 中通过实现 js 函数接口来修改,接口定义如下: function markInvalidCellUser(cell, addMark) { // 用户程序代码 } 参数 cell 表示需要标注的单元格对象,addMark 是 bool 型,true 表示要添加标注,false 表示要清除标注。 下面是系统的标注函数,供参考 function _markInvalidCellDefault(cell, addMark) { var oldbk = cell.getAttribute(“oldbk”); if(addMark) { // 添加标记 if(oldbk != null) return; // 标记过的,不用再标记了 cell.setAttribute(“oldbk”, cell.style

【JavaWeb】导入Excel并进行校验

随声附和 提交于 2019-12-05 12:08:38
一.需要实现的目标 1.界面编写 2.导入表读取表名,进行校验,后台匹配(判断此表的名称是否能够模糊匹配上) 3.确定表存在,读取其中的数据,暂存 4.正则表达式数据校验(判断是否已存在,数据是否符合格式) 5.导入数据库 二.导入表的业务逻辑 参考 https://blog.csdn.net/meng564764406/article/details/52426634 ,分析业务逻辑 1.student.java //student表的类, 属性和getter&setter 2.common.java//连接数据库的常量以及定义的动态增删改查语句 3.readExcel.java//读Excel的值,赋给student实体属性的List+返回值? 4.saveDB.java//从List里读取后存入数据库(判断是否已存在) 5.Upload.java ( extends HttpServlet) //使用Apache文件上传组件处理文件上传步骤; //使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项; 6. DbUtil.java//数据的操作实现(连接并操作、读取值) 7.界面 来源: https://www.cnblogs.com/SeasonBubble/p

jwt token校验获取用户数据

北慕城南 提交于 2019-12-05 11:29:58
/** * 用户登录成功之后,获取用户信息 * 1.获取用户id * 2.根据id查询用户 * 3.构建返回值对象 * 4.返回数据 * @return */@RequestMapping(value = "/profile",method = RequestMethod.POST)public Result profile(HttpServletRequest request){ /** * 请求头信息中获取请求数据 * 1.获取请求头信息:名称:=Authorization * 2.解析token * 3.获取clamix */ String authorization = request.getHeader("Authorization"); if (StringUtils.isEmpty(authorization)){ System.out.println("你还未登录!"); } String token=authorization.replace("Bearer",""); Claims claims = jwtUtils.parseJWT(token); String userId=claims.getId(); User user = userService.findById(userId); return new Result(ResultCode