外贸英文网站镇江做网站哪家公司好
外贸英文网站,镇江做网站哪家公司好,网站程序制作,顺德网站建设jinqiye4.1 处理表单的输入
先来看一个表单递交的例子#xff0c;我们有如下的表单内容#xff0c;命名成文件login.gtpl(放入当前新建项目的目录里面) html
head
title/title
/head
body
form action/login meth…4.1 处理表单的输入
先来看一个表单递交的例子我们有如下的表单内容命名成文件login.gtpl(放入当前新建项目的目录里面) html
head
title/title
/head
body
form action/login methodpost用户名:input typetext nameusername密码:input typepassword namepasswordinput typesubmit value登录
/form
/body
/html上面递交表单到服务器的/login当用户输入信息点击登录之后会跳转到服务器的路由login里面我们首先要判断这个是什么方式传递过来POST还是GET呢
http包里面有一个很简单的方式就可以获取我们在前面web的例子的基础上来看看怎么处理login页面的form数据 package mainimport (fmthtml/templatelognet/httpstrings
)func sayhelloName(w http.ResponseWriter, r *http.Request) {r.ParseForm() //解析url传递的参数对于POST则解析响应包的主体request body//注意:如果没有调用ParseForm方法下面无法获取表单的数据fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息fmt.Println(path, r.URL.Path)fmt.Println(scheme, r.URL.Scheme)fmt.Println(r.Form[url_long])for k, v : range r.Form {fmt.Println(key:, k)fmt.Println(val:, strings.Join(v, ))}fmt.Fprintf(w, Hello astaxie!) //这个写入到w的是输出到客户端的
}func login(w http.ResponseWriter, r *http.Request) {fmt.Println(method:, r.Method) //获取请求的方法if r.Method GET {t, _ : template.ParseFiles(login.gtpl)log.Println(t.Execute(w, nil))} else {//请求的是登录数据那么执行登录的逻辑判断fmt.Println(username:, r.Form[username])fmt.Println(password:, r.Form[password])}
}func main() {http.HandleFunc(/, sayhelloName) //设置访问的路由http.HandleFunc(/login, login) //设置访问的路由err : http.ListenAndServe(:9090, nil) //设置监听的端口if err ! nil {log.Fatal(ListenAndServe: , err)}
}
通过上面的代码我们可以看出获取请求方法是通过r.Method来完成的这是个字符串类型的变量返回GET, POST, PUT等method信息。
login函数中我们根据r.Method来判断是显示登录界面还是处理登录逻辑。当GET方式请求时显示登录界面其他方式请求时则处理登录逻辑如查询数据库、验证登录信息等。
当我们在浏览器里面打开http://127.0.0.1:9090/login的时候出现如下界面 如果你看到一个空页面可能是你写的 login.gtpl 文件中有错误请根据控制台中的日志进行修复。
图4.1 用户登录界面
我们输入用户名和密码之后发现在服务器端是不会打印出来任何输出的为什么呢默认情况下Handler里面是不会自动解析form的必须显式的调用r.ParseForm()后你才能对这个表单数据进行操作。我们修改一下代码在fmt.Println(username:, r.Form[username])之前加一行r.ParseForm(),重新编译再次测试输入递交现在是不是在服务器端有输出你的输入的用户名和密码了。
r.Form里面包含了所有请求的参数比如URL中query-string、POST的数据、PUT的数据所以当你在URL中的query-string字段和POST冲突时会保存成一个slice里面存储了多个值Go官方文档中说在接下来的版本里面将会把POST、GET这些数据分离开来。
现在我们修改一下login.gtpl里面form的action值http://127.0.0.1:9090/login修改为http://127.0.0.1:9090/login?usernameastaxie再次测试服务器的输出username是不是一个slice。服务器端的输出如下 图4.2 服务器端打印接收到的信息
request.Form是一个url.Values类型里面存储的是对应的类似keyvalue的信息下面展示了可以对form数据进行的一些操作: v : url.Values{}
v.Set(name, Ava)
v.Add(friend, Jess)
v.Add(friend, Sarah)
v.Add(friend, Zoe)
// v.Encode() nameAvafriendJessfriendSarahfriendZoe
fmt.Println(v.Get(name))
fmt.Println(v.Get(friend))
fmt.Println(v[friend]) Tips: Request本身也提供了FormValue()函数来获取用户提交的参数。如r.Form[“username”]也可写成r.FormValue(“username”)。调用r.FormValue时会自动调用r.ParseForm所以不必提前调用。r.FormValue只会返回同名参数中的第一个若参数不存在则返回空字符串。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89198.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!