数据校验

接口幂等性如何实现?

江枫思渺然 提交于 2020-04-06 10:01:50
接口幂等性如何实现? 导读 转载自 幂等性如何实现?深入了解一波!!! 现在这个时代大家可能最关心的就是钱了,那么有没有想过你银行转账给你没有一次是转多的,要么失败,要么成功,为什么不能失误一下多转一笔呢?醒醒吧年轻人,别做梦了,做银行的能那么傻x吗? 今天我们就来谈一谈为什么银行转账不能多给我转一笔?关乎到钱的问题,小伙伴们打起精神!!! 要想要理解上述的疑惑,不得不提的一个概念就是幂等性,至于什么是幂等性,如何通过代码实现幂等性,下面将会详细讲述。 什么是幂等性 所谓幂等性通俗的将就是一次请求和多次请求同一个资源产生相同的副作用。用数学语言表达就是 f(x)=f(f(x)) 。 维基百科的幂等性定义如下: 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的,更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 为什么需要幂等性 在系统高并发的环境下,很有可能因为网络

二维码传输文件

若如初见. 提交于 2020-04-06 03:37:48
这是我大概在5,6年前写的东西,当时种种原因,删除了,现在有空闲时间,补发一下。 二维码是现在非常常用的一种信息传播载体,通过智能手机,可以方便快捷的传输小容量信息,是否可以通过二维码进行文件传递呢,现在就进行一下探讨( 只做探讨,没什么实际使用价值,太慢,传输文件太小 )。 二维码多种多样,简单列个表展示一下: QR二维码 Data Matrix Aztec Codablock F MaxiCode PDF417 DotCode NTIN Han Xin 除此之外还有很多种,既然进行二维码文件传输就要进行选型,但进行一番分析之后,发现不用选,只有QR二维码..... 在预算有限的情况下,识别只能通过手机(可运行软件,带有摄像头,人人都有,无需新购硬件)。 手机二维码识别软件基本都是QR的(如果熟悉安卓或IOS开发,自己开发的另算,但最好别自己开发,成功率,快速连续识别都是不小的挑战)。 既然选定QR进行传输,就继续进一步研究QR的容量问题,QR最早是日本发明出来的,在中国发扬光大,国家是有QR二维码国标的,有1~40共40个版本,不同版本数据容量不一样,每一个版本都分四个纠错等级。纠错等级和容量如下: 等级 可恢复的码字比例 L 7% M 15% Q 25% H 30% 版本 纠错等级 8位字节(B) 1 L 17 1 M 14 1 Q 11 1 H 7 2 L 32 2 M

drf框架 ModelSerializer

这一生的挚爱 提交于 2020-04-03 01:40:29
ModelSerializer 一、准备 配置settings.py INSTALLED_APPS = [ # ... 'rest_framework', ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dg_proj', 'USER': 'root', 'PASSWORD': '123', } } """ 任何__init__文件 import pymysql pymysql.install_as_MySQLdb() """ LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 路由 # 主 from django.conf.urls import url, include from django.contrib import admin from django.views.static import serve from django.conf import settings urlpatterns

SpringBoot 之 JSR303 数据校验

蓝咒 提交于 2020-03-29 14:57:09
使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public class Person { @Email(message="邮箱格式错误") private String email; } 常见的校验注解: 空检查 @Null 验证对象是否为null @NotNull 验证对象不能为null,无法查检空字符串 @NotBlank 验证去掉前后空格后的字符串不能为Null或者长度为0 @NotEmpty 验证对象(String/Collection/Map/Array)不能为null或者长度为0 Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(String/Collection/Map/Array)长度是否在给定的范围内 @Length(min=, max=) 验证字符串的长度是否在给定的范围内 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @PastOrPresent @Future 验证 Date 和 Calendar 对象是否在当前时间之后

AspNetCore3.1_Secutiry源码解析_8_Authorization_授权框架

浪尽此生 提交于 2020-03-29 03:22:30
目录 AspNetCore3.1_Secutiry源码解析_1_目录 AspNetCore3.1_Secutiry源码解析_2_Authentication_核心流程 AspNetCore3.1_Secutiry源码解析_3_Authentication_Cookies AspNetCore3.1_Secutiry源码解析_4_Authentication_JwtBear AspNetCore3.1_Secutiry源码解析_5_Authentication_OAuth AspNetCore3.1_Secutiry源码解析_6_Authentication_OpenIdConnect AspNetCore3.1_Secutiry源码解析_7_Authentication_其他 AspNetCore3.1_Secutiry源码解析_8_Authorization_授权框架 简介 开篇提到过,认证主要解决的是who are you,授权解决的是 are you allowed的问题。各种认证架构可以帮我们知道用户身份(claims),oauth等架构的scope字段能够控制api服务级别的访问权限,但是更加细化和多变的功能授权不是它们的处理范围。 微软的Authorization项目提供了基于策略的灵活的授权框架。 推荐看下面博客了解,我主要学习和梳理源码。 https://www

IdentityServer4源码解析_4_令牌发放接口

回眸只為那壹抹淺笑 提交于 2020-03-29 02:30:20
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4源码解析_4_令牌发放接口 identityserver4源码解析_5_查询用户信息接口 identityserver4源码解析_6_结束会话接口 identityserver4源码解析_7_查询令牌信息接口 identityserver4源码解析_8_撤销令牌接口 协议 Token接口 oidc服务需要提供token接口,提供AccessToken,IdToken,以及RefreshToken(可选)。在授权码模式下,token接口必须使用https。 请求 必须使用POST方法,使用x-www-form-urlencoded序列化参数,clientId:clientSecret使用Basic加密放在Authorization头中 POST /token HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW grant_type=authorization_code&code

Django中Form表单之字段详解

六月ゝ 毕业季﹏ 提交于 2020-03-26 18:55:47
Django中的Form表单   1、背景     平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等。Django中的form表单就能够帮我们去实现这些功能,比较便捷。   2、Django form表单的功能       1、生成页面可执行的HTML标签       2、对应户的数据进行校验       3、保留上次输入的内容   3、先用普通方式手写一个注册功能     1、views.py文件中 # 注册 def register(request): error_msg = "" # 刚进页面的时候,用户名还为空,此时错误信息先设置成空 if request.method == "POST": username = request.POST.get("name") pwd = request.POST.get("pwd") # 对注册信息做校验 if len(username) < 6: # 用户长度小于6位 error_msg = "用户名长度不能小于6位" else: # 将用户名和密码存到数据库 return HttpResponse("注册成功") return render(request, "register.html", {"error_msg": error_msg})     2

编写GO的WEB开发框架 (六): Validator数据校验

元气小坏坏 提交于 2020-03-25 03:52:19
3 月,跳不动了?>>> 一般地,获取到请求参数后,都需要根椐接口定义,对参数有一些合法性检查,比如: 是否必填 是否数字,数字的范围 字符串的长度 值是否在指定的列表中 是否有效的日期 是否满足指定的正式表达式 本篇讲述怎么编写一个Validator来对请求参数进行合法性检查。 validator的使用方法 设计一个功能时,我都习惯“目标驱动”,那就先来看看我期望的Validator怎么使用 func (this *Controller) User(){ validator:=NewValidator(this.Post) //将要检查的数据字典传入,生成Validator对象 validator.AddRule("name","string","2-5",true) //对字段name添加规则: 2-5个字符长度,必填 validator.AddRule("sport","list","football,swim",false) //对字段sport添加规则: 值需在列表中(football,swim),非必填 ... if err:= validator.Check();err !=nil{ //检查不通过,处理错误 } } 相关结构、接口及实现 有了目标,就开始定义对象、接口及相关的方法 type Validator struct { data map[string

登录测试点整理

落爺英雄遲暮 提交于 2020-03-24 06:49:28
登录测试点整理 汇总整理一些日常工作中用到的测试点,学习积累经验...PS:部分用例摘自网络 首先简述下 测试用例设计方法 1) 等价类划分 :把程序所有可能的输入域划分成若干部分,然后从中选取少数具有代表性的数据作为测试用例 2) 边界值分析 :对输入或输出的边界值进行测试的一种黑盒测试方法 3) 错误推测法 :基于经验和直觉推测程序中所有可能存在的各种错误 4) 因果图方法 :是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况 5) 正交试验法 :根据正交性从全面试验中挑选出部分具有代表性的点进行试验,这些代表性的点具备了均匀分散,齐整可比的特点 6) 判定表驱动 :若功能说明中存在输入条件的组合情况,则结合因果图法,采用判定表驱动方法来设计测试用例 7) 场景设计法 :同一事件的不同触发顺序和处理结果形成了事件流,根据不同的事件流来设计用例 8) 功能图方法 :使用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例 综上所述,前面3种方法应该是平常测试运用最多的用例设计方法。 功能测试点: 1. 输入已注册的用户名和正确的密码,验证是否成功登录 2. 输入已注册的用户名和不正确的密码,验证是否成功失败,且提示信息正确 3. 输入未注册的用户名和任意密码,验证是否登录失败,且提示信息正确 4. 使用未激活账户

JSR303后台校验工具

家住魔仙堡 提交于 2020-03-23 14:04:13
一、jar包的准备 <!-- JSR303数据校验的jar包5个 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency> <dependency> <groupId>com.fasterxml</groupId> <artifactId>classmate</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator-annotation-processor</artifactId> <version>5.1.3.Final</version> </dependency> <dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.3.0.Final</version> </dependency> <dependency>