数据校验

plantuml-绘制状态图和活动图和部署图​

久未见 提交于 2019-11-27 02:32:56
背景 状态图:对象的所有状态,以及基于事件发生的状态改变的过程; 活动图:用例的工作流程; 部署图:系统的软硬件物理体系结构; 状态图 基本语法 元素 语法 说明 开始和结束状态 [*] 标识开始和结束状态 箭头 --> 添加箭头 隐藏描述区域 hide empty description 隐藏描述区域 合成状态 state 合成状态名字{ 增城的状态定义语法} 可以嵌套状态图 状态声明 state 状态名字 : 备注 声明状态 fork,join state state名字 分开,合并状态 并发状态 -- or 或者双竖线 状态是并发改变的 箭头方向 top down left right 可以控制箭头的方向 单行注释 note 方位 of 状态名 : 单行注释 单行注释 多行注释 note 方位 of 状态名 换行 单行注释 换行 end note 多行注释 登录状态图 @startuml hide empty description left to right direction [*]-->NotLogin:首次打开app state NotLogin: 没有登录 state LoginSuccess: 登录成功 state LoginFail: 登录失败 NotLogin -->LoginSuccess: 登录 NotLogin -->LoginFail:登录 state

封装一个非空校验函数

冷暖自知 提交于 2019-11-27 00:13:56
封装一个非空校验函数 前言 一、判断是否为空 二、定义 Generator 函数 三、执行分段函数 四、处理执行分段函数的结果 五、使用函数 六、总结 前言 不管是前端还是后端,非空校验在 Web 应用中都很常见。前端应用中,特别是调取接口数据传参时,非空校验几乎必不可少。大部分的人实现思路都是判断是否为空,空则 return 。只有一两个参数判断还好说,但是如果有很多参数需要判断,就要写很多重复的代码。本着做一个 “ 不多写一行重复代码 ” 的码农,封装出一个非空校验函数是必需的,今天就把这个方法分享给大家。如果不想看推导过程可以直接看五,直接使用。 一、判断是否为空 最普通的非空校验 //1. 写一个通用是否为空的函数 function isDefine ( str ) { if ( str == null || str == '' || str == undefined || str == NaN ) { return false } ; return true ; } //2. 如果为空则提示并返回 function prompt ( ) { if ( ! isDefine ( value ) ) { Toast . info ( msg , 1 ) ; //Toast 是 antd mobile 提供的一个提示函数,测试的话可以用alert。 return false }

文件系统及分区和raid

ⅰ亾dé卋堺 提交于 2019-11-26 23:48:21
磁盘存储和文件系统1. EXT3 (1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件(2)Ext3目前只支持32000个子目录(3)Ext3文件系统使用32位空间记录块数量和i-节点数量(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块 2.EXT4 EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。(1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB (2)理论上支持无限数量的子目录(3)Ext4文件系统使用64位空间记录块数量和i-节点数量(4)Ext4的多块分配器支持一次调用分配多个数据块 XFS (1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容(2)采用优化算法,日志记录对整体文件操作影响非常小(3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间(4)能以接近裸设备I/O的性能存储数据 命令是扫描硬盘是否挂载上。 表示以80表示一个硬盘只能有一个活动分区和3个非活动分区, 80代表着活动分区,操作系统启动的时候从80标记的分区上寻找启动的相关文件, 查看分区表的前512字节,着前512字节起到了保护分区的作用 成二进制转换方式。的前512字节。 磁盘管理分区命令及用法 lsblk:查看块设备的命令。对应的是B开头的设备

前后端分离后台api接口框架探索

╄→гoц情女王★ 提交于 2019-11-26 23:38:20
前言   很久没写文章了,今天有时间,把自己一直以来想说的,写出来,算是一种总结吧! 这篇文章主要说前后端分离模式下(也包括app开发),自己对后台框架和与前端交互的一些理解和看法。   前后端分离,一般传递json数据,对于 出参 ,现在通用的做法是,包装一个响应类,里面包含code,msg,data三个属性,code代表状态码,msg是状态码对应的消息,data是返回的数据。   如 {"code":"10008","message":"手机号不存在","totalRows":null,"data":null}   对于入参,如果没有规范,可是各式各样的,比如:   UserController的getById方法,可能是这样的:          如果是把变量放在url,是这样的:        比如 addUser方法,如果是用user类直接接收参数,是这样的:      这样在前后端不分离的情况下,自己前后端代码都写,是没有啥问题,但是前后端分离情况下,如果这样用user类接收参数,如果你用了swagger来生成接口文档,那么,User类里面的一些对于前段来说没用的字段(createTime、isDel、updateTime。。。),也都会给前端展示出来,这时候前端得来问你,哪些参数是有用的,哪些是没用的。其实每个接口,对前端没用的参数,最好是不要给他展示,所以

接口测试--了解一下

对着背影说爱祢 提交于 2019-11-26 21:06:05
首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。 程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。 一、常见接口: 1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有SoapUI、jmeter、loadrunner等; 2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。可以使用的工具有postman、RESTClient、jmeter、loadrunner等; 二、前端和后端: 在说接口测试之前,我们先来搞清楚这两个概念,前端和后端。 前端是什么呢

vue+iview的form表单校验总结

狂风中的少年 提交于 2019-11-26 20:36:05
这篇文章时关于如何使用iview的form表单校验。主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验。 1.为需要校验的表单添加form标签 <!--注意: ref/rules/model/prop等属性是必须的--> <Form res="foemRef" :rules="formRules" :model="formData" v-if="liveNode"> <Row> <!--正常校验--> <Col> <FormItem prop="name"> <Input v-model="formData.name"></Input> </FormItem> </Col> <!--动态校验--> <Col v-if="flag"> <FormItem prop="age"> <Input v-model="formData.age"></Input> </FormItem> </Col> <!--异步校验--> <Col> <FormItem prop="asyName"> <Input v-model="formData.asyName"></Input> </FormItem> </Col> </Row> </Form> 2.添加校验规则 formRules: { name: [ {required: true, message:

layui数据校验.

て烟熏妆下的殇ゞ 提交于 2019-11-26 12:47:43
1.引用layui对应的js.css 2.//HTML部分 <input type="text" name="title" lay-verify=" projectName " autocomplete="off" placeholder="请输入标题" class="layui-input"> <select name="modules" lay-verify=" cityPermanentPopulation " lay-search=""> <option value="">直接选择或搜索选择</option> <option value="1">layer</option> <option value="2">form</option> </select> <button type="button" id="submit" class="zp-btn zp-btn-green pad33" lay-filter="addSubmit" lay-submit>保存</button> 3.js校验部分 //表单验证 function layuiformverify() { layui.form.verify({ //基本信息 projectName : function (value) { //项目名称 if (!value) { return '项目名称不能为空'; } if

[转]0day零距离

穿精又带淫゛_ 提交于 2019-11-26 12:43:16
前言: 想起这个话题,还要从早年网上的一则新闻说起——“美国联邦官员于2001年12月11日宣布,已破获一起以因特网为犯罪手段的特大软件盗版案……盗版软件的总价值至少高达10亿美元。据悉,该犯罪团伙名为“Warez”,是一个松散的盗版网络……” 什么是Warez和0Day?Warez的世界到底怎样?今天我们就来看个仔细! 关于0Day和Warez 其实0Day和Warez一直以来并没有一个确切的定义,正如黑客(Hacker)一直以来也没有一个确切的“官方定义”一样。互联网上流传着各种各样的说法,而真正是破解组织成员的人又不屑出来纠正这些说法,所以一时众说纷纭,也不知道谁对谁错……(在这里,我们也只能列出感觉比较合理的说法供大家参考) 0Day:“0Day”只是指在最短的时间内“破解”(并不强调当天破解),并在网上发布。 Warez:“Warez”就是“上传到网上让其它人免费下载的完全版软件”的意思。“Ware”来自于“SoftWare”,而之所以结尾加“z”而不加“s”(在英语中,名词后面加“s”表示复数形式,指很多东西),是因为加“z”的读音和“s”类似,但是看起来却完全不同——正如常见的英文名字写法应该是首字母大写,比如“Robbins”,黑客或者破解者们就偏偏喜欢写成“rOBBiNS”,将大小写颠倒以显得自己很另类,很“酷”。 所以,这个世界上其实并不存在某个叫做“Warez

关于RAID与SCSI的一些基本概念

不想你离开。 提交于 2019-11-26 10:13:43
RAID简介 内嵌微处理器的磁盘子系统通常称为R A I D系统。R A I D阵列的可用容量总小于成员磁盘的总量。 一、RAID 0(分块)是简单的、不带有校验的磁盘分块,本质上它并不是一个真正的R A I D,因为它并不提供任何形式的冗余。假如RAID 0的磁盘失败,那么,数据将彻底丢失。为了在RAID 0情况下恢复数据,唯一的办法是使用磁带备份或者镜像拷贝。 二、RAID 1(镜像)是非校验的R A I D级。 三、RAID 2(专有磁盘的并行访问)的定义涉及R A I D控制器中的错误校验电路。这个功能已经被集成到磁盘驱动器中,虽然便宜,但效率却不高。因此, RAID 2没有形成产品。 四、并行访问R A I D都属于R A I D 3。R A I D 3(使用专有校验磁盘的同步访问)子系统将数据分块存放到阵列中的所有驱动器,将校验数据写到阵列中的一个另外的校验磁盘, R A I D 3被认为是校镽 A I D。 五、RAID4(使用专用校验磁盘的独立访问)是一种独立访问的R A I D实现,它使用一个专用的校验磁盘。与RAID 3不同的是,RAID 4有更大量的分块,使多个I / O请求能同时处理。虽然它为读请求提供了性能的优势,但RAID 4的写开销特别大,因为在每次读、修改和写周期中,校验磁盘都被访问两次。 六、RAID 5(使用分布式校验的独立访问

django -- form

两盒软妹~` 提交于 2019-11-26 08:31:31
前戏 我们之前是通过html的form表单来提交数据,提交到服务器之后,我们需要对某些字段做判断,比如用户名密码的长度,格式正确不正确。如果用户输入的内容不正确就要在页面上显示对应的错误信息。当然我们可以通过if..elif来进行判断,但是这样写的话,代码很冗余。而Django的form组件就提供了我们这些校验的功能。 普通验证 先来看看不使用form来判断用户名不能小于6位长度是怎么做的 视图函数 def register(request): error_msg = '' if request.method=="POST": user = request.POST.get('user') pwd = request.POST.get('pwd') if len(user)<6: error_msg='用户名长度不符合' else: error_msg = '注册成功' return render(request, 'register.html',{'error_msg': error_msg}) html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> {% csrf