GO WEB 学习笔记(二)WEB 表单

表单

  • 什么是表单?
  • 表单是一个包含表单元素的区域,用户可以往表单里面填写信息,表单也是前端页面的元素

处理表单输入

  • 我们通过一个例子来看go是如何处理表单输入的
    在这里插入图片描述

  • 客户端递交表单到服务器/login,当用户输入信息点击登录之后,会跳转到服务器的路由login里面,我们首先要判断这个由什么方式传递过来?

  • http包就有个很简单的方式就可以获取,就是 r.Method ,这是个字符串类型的变量

  • 下面写个方法来做登录处理逻辑

func login(w http.ResponseWriter, r *http.Request) {
	fmt.Println("method: ", r.Method)
	if r.Method == "GET" {
		fmt.Println(r.URL)
	} else {
		fmt.Println("username:", r.Form["username"])
		fmt.Println("password:", r.Form["password"])
	}
}
  • 然后将这个方法注入到main方法中
func main() {
	http.HandleFunc("/", getWeb)
	http.HandleFunc("/login", login)
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe:", err)
	}
}

  • 运行一下,然后通过postman模拟客户端发送请求,后台打印出数据

在这里插入图片描述

  • 但是我们发现,并没有将表单中的 username 和 password 给打印出来,为什么呢?
  • 因为默认情况下,Handler并不会帮你解析form,需要你自己调用一下 r.ParseForm() 才可以,所以我们在POST方法中加入进去,再测试一下
    在这里插入图片描述
    在这里插入图片描述
  • 通过上图我们可以看到,这样就能获取到信息
  • r.Form里面包含了所有请求的参数,比如URL中query-string、POST的数据、PUT的数据,当你在URL的query-string字段和POST冲突时,会保存成一个slice,里面存储了多个值,Go语言官方文档中说在接下来的版本中将会把POST、GET这些数据分离开来。
  • 当我们在url后面加上参数,服务器输出的有两个值,不再是一个值
    在这里插入图片描述
    在这里插入图片描述
  • 这就说明 form 是一个map[string][]string数组
    在这里插入图片描述

验证表单的输入

  • 开发web的一个原则就是,不能信任用户,所以验证和过滤用户的输入信息就变得非常重要,下面就来讲讲服务器验证
  • 对于数字进行验证:
		//数字判断一
		num, err := strconv.Atoi(r.Form.Get("password"))
		if err != nil {
			fmt.Println("数字转化出错!")
		}
		fmt.Println(num)

		//数字判断二 正则表达式
		if m, _ := regexp.MatchString("^(0-9)+$", r.Form.Get("password")); !m {
			fmt.Println("数字转化出错!")
		}
  • 对于中文进行验证:
		//中文判断
		if m, _ := regexp.MatchString("[\u4e00-\u9fa5]", r.Form.Get("username")); !m {
			fmt.Println("中文转化出错!")
		}
		fmt.Println(r.Form.Get("username"))
  • 对于英文进行验证:
		//英文判断
		if m, _ := regexp.MatchString("^[a-zA-z]+$", r.Form.Get("username")); !m {
			fmt.Println("英文转化出错!")
		}
		fmt.Println(r.Form.Get("username"))
  • 对于邮箱进行验证:
		//电子邮箱地址
		if m, _ := regexp.MatchString("\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}", r.Form.Get("email")); !m {
			fmt.Println("邮箱转化出错!")
		}
		fmt.Println(r.Form.Get("email"))
  • 对于手机进行验证:
		//手机号
		if m, _ := regexp.MatchString("0?(13|14|15|17|18|19)[0-9]{9}", r.Form.Get("phone")); !m {
			fmt.Println("手机转化出错!")
		}
		fmt.Println(r.Form.Get("phone"))
  • 对于身份证进行验证:
		//身份证
		if m, _ := regexp.MatchString("\\d{17}[\\d|x]|\\d{15}", r.Form.Get("idcard")); !m {
			fmt.Println("身份证转化出错!")
		}
		fmt.Println(r.Form.Get("idcard"))

预防跨站脚本

处理文件上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值