golang表单及验证支持
在Web开发中对于这样的一个流程可能很眼熟:
- 打开一个网页显示出表单。
- 用户填写并提交了表单。
- 如果用户提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同用户的数据和错误问题的描述信息返回。
- 用户再次填写,继续上一步过程,直到提交了一个有效的表单。
在接收端,脚本必须:
- 检查用户递交的表单数据。
- 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能与已存在的他人用户名重复,甚至是一个保留字等。
- 过滤数据并清理不安全字符,保证逻辑处理中接收的数据是安全的。
- 如果需要,预格式化数据(数据需要清除空白或者经过HTML编码等等。)
- 准备好数据,插入数据库。
尽管上面的过程并不是很复杂,但是通常情况下需要编写很多代码,而且为了显示错误信息,在网页中经常要使用多种不同的控制结构。创建表单验证虽简单,实施起来实在枯燥无味。
表单和验证
对于开发者来说,一般开发过程都是相当复杂,而且大多是在重复一样的工作。假设一个场景项目中忽然需要增加一个表单数据,那么局部代码的整个流程都需要修改。我们知道Go里面struct是常用的一个数据结构,因此beego的form采用了struct来处理表单信息。
首先定义一个开发Web应用时相对应的struct,一个字段对应一个form元素,通过struct的tag来定义相应的元素信息和验证信息,如下所示:
type User struct{Username string `form:text,valid:required`Nickname string `form:text,valid:required`Age int `form:text,valid:required|numeric`Email string `form:text,valid:required|valid_email`Introduce string `form:textarea`
}
定义好struct之后接下来在controller中这样操作
func (this *AddController) Get() {this.Data["form"] = beego.Form(&User{})this.Layout = "admin/layout.html"this.TplNames = "admin/add.tpl"
}
在模板中这样显示表单
<h1>New Blog Post</h1>
<form action="" method="post">
{{.form.render()}}
</form>
上面我们定义好了整个的第一步,从struct到显示表单的过程,接下来就是用户填写信息,服务器端接收数据然后验证,最后插入数据库。
func (this *AddController) Post() {var user Userform := this.GetInput(&user)if !form.Validates() {return }models.UserInsert(&user)this.Ctx.Redirect(302, "/admin/index")
}
表单类型
以下列表列出来了对应的form元素信息:
名称 | 参数 | 功能描述 |
---|---|---|
text | No | textbox输入框 |
button | No | 按钮 |
checkbox | No | 多选择框 |
dropdown | No | 下拉选择框 |
file | No | 文件上传 |
hidden | No | 隐藏元素 |
password | No | 密码输入框 |
radio | No | 单选框 |
textarea | No | 文本输入框 |
表单验证
以下列表将列出可被使用的原生规则
规则 | 参数 | 描述 | 举例 |
---|---|---|---|
required | No | 如果元素为空,则返回FALSE | |
matches | Yes | 如果表单元素的值与参数中对应的表单字段的值不相等,则返回FALSE | matches[form_item] |
is_unique | Yes | 如果表单元素的值与指定数据表栏位有重复,则返回False(译者注:比如is_unique[User.Email],那么验证类会去查找User表中Email栏位有没有与表单元素一样的值,如存重复,则返回false,这样开发者就不必另写Callback验证代码。) | is_unique[table.field] |
min_length | Yes | 如果表单元素值的字符长度少于参数中定义的数字,则返回FALSE | min_length[6] |
max_length | Yes | 如果表单元素值的字符长度大于参数中定义的数字,则返回FALSE | max_length[12] |
exact_length | Yes | 如果表单元素值的字符长度与参数中定义的数字不符,则返回FALSE | exact_length[8] |
greater_than | Yes | 如果表单元素值是非数字类型,或小于参数定义的值,则返回FALSE | greater_than[8] |
less_than | Yes | 如果表单元素值是非数字类型,或大于参数定义的值,则返回FALSE | less_than[8] |
alpha | No | 如果表单元素值中包含除字母以外的其他字符,则返回FALSE | |
alpha_numeric | No | 如果表单元素值中包含除字母和数字以外的其他字符,则返回FALSE | |
alpha_dash | No | 如果表单元素值中包含除字母/数字/下划线/破折号以外的其他字符,则返回FALSE | |
numeric | No | 如果表单元素值中包含除数字以外的字符,则返回 FALSE | |
integer | No | 如果表单元素中包含除整数以外的字符,则返回FALSE | |
decimal | Yes | 如果表单元素中输入(非小数)不完整的值,则返回FALSE | |
is_natural | No | 如果表单元素值中包含了非自然数的其他数值 (其他数值不包括零),则返回FALSE。自然数形如:0,1,2,3....等等。 | |
is_natural_no_zero | No | 如果表单元素值包含了非自然数的其他数值 (其他数值包括零),则返回FALSE。非零的自然数:1,2,3.....等等。 | |
valid_email | No | 如果表单元素值包含不合法的email地址,则返回FALSE | |
valid_emails | No | 如果表单元素值中任何一个值包含不合法的email地址(地址之间用英文逗号分割),则返回FALSE。 | |
valid_ip | No | 如果表单元素的值不是一个合法的IP地址,则返回FALSE。 | |
valid_base64 | No | 如果表单元素的值包含除了base64 编码字符之外的其他字符,则返回FALSE。 |
golang表单及验证支持相关推荐
- 新工具:表单/Cookie 验证网站爬网设置工具
在今年3月份的blog里面,我曾经说过SharePoint Team将会发布一个补丁来让SharePoint Server 2007的搜索引擎支持对基于表单/Cookie验证的网站进行爬网.今天,Sh ...
- oform java_客户端表单通用验证checkForm(oForm)(1)
*--------------- 客户端表单通用验证checkForm(oForm) ----------------- * 本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基 ...
- elementui 嵌套表单验证_vue elementUI 表单嵌套验证的实例代码
一:表单一级验证 element中from组件内表单验证通过使用el-form标签,绑定model和rules属性进行表单验证 简单的表单验证很简单,在prop内绑定验证属性,然后在rules对象内定 ...
- Html利用函数输入学生的性别,JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)...
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证) 发布时间:2020-10-08 04:15:08 来源:脚本之家 阅读:73 作者:水山奇 问题:表单怎么在输入后 ...
- layui单选框verify_layui lay-verify form表单自定义验证规则详解
虽然layui的官方文档已经是写的比较详细,但是初次使用的时候总会懵一下,这里纪录一下lay-verify自定义验证规则的时候到底放哪. html: 提交 js: form.verify({ //数组 ...
- js登录特效+ajax提交表单+异步刷新验证
今天成功测试一种js登录特效+ajax提交表单+异步刷新验证,登录时特效提醒,无刷新ajax提交表单,获取验证结果,跳转正式页面:废话不多说,先直接分享代码: 1.主界面index.php 加载的这 ...
- html表单 asp验证,ASP中JavaScript处理复杂表单的生成与验证
ASP中JavaScript处理复杂表单的生成与验证 更新时间:2007年03月25日 00:00:00 作者: 这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框.单行文本.多 ...
- 在ASP.NET中如何用C#.NET实现基于表单的验证
这篇文章引用到了Microsoft .NET类库中的以下名空间: System.Data.SqlClient System.Web.Security ------------------------- ...
- Angualr6表单提交验证并跳转
在Angular6中,使用NG-ZRROR作为前端开发框架,在进行表单开发时遇到了一些问题,最后解决了,在此记录. 1.表单构造: 引入forms: import { FormGroup, FormB ...
最新文章
- Java虚拟机中的栈和堆
- (11/24) css进阶:Less文件的打包和分离
- SAP Cloud Application Programming bookshop 例子的 Fiori Preview
- 【安卓开发】Android初级开发(okhttp3发送带header与带参数的GET请求)
- 新疆计算机二级慨库,2020新疆维吾尔自治区计算机二级易考套餐:二级MS Office高级应用全程班(网课+题库+教材)...
- window命令行大全
- 全球首发!惯性导航导论(剑桥大学)第十一部分
- python中对象的概念是什么_python面向对象编程的基本概念
- IEC_60068-2-64基本环境试验规程第2-64部分试验试验Fh振动、宽带随机抽样
- 新宠混血儿诞生记--Java+PHP整合
- 【搜索】【usaco 4.1.4】奶牛加密术
- JDK如何安装与配置环境变量
- ubuntu永久修改mac地址
- Hoo Smart Chain 万物生长计划火热报名中,可视化公链迸发勃勃生机
- jquery 基础教程[温故而知新二]
- Youtube内容正在失控
- Object.assign()方法
- 一文了解深度学习实战——预测篇
- Unity editor 快速上手 quick start
- 跟着 伍逸 老师学GDI+ 之Pen的DashPatten属性