上一节我们介绍了搭建一个Web服务器,本节我们来看看通过表单让客户端和服务器方便的进行数据交互,首先我们来看看一个简单的例子:提交用户名密码,点击登陆,很多网站登陆操作。新建一个表单文件命名为:login.gtpl
表单例子:
<html>
<head>
<title>登陆<title>
</head>
<body>
<form action=”http://127.0.0.1:9090/login”method=”post”>
用户名:<input type=”text”name=”username”>
密码:<input type=”password” name=”password”>
<input type=”submit” value=”登陆”>
</body>
</html>
接下来递交表单到服务器的/login,当我们输入信息点击登陆之后,会跳转到服务器的路由login里面,我们要判断有什么方式传递过来的,是POST还是GET呢?如果你想深入了解POST和GET的区别建议你看看这篇文章,写得生动有趣,介绍比较透彻。
我们来看看http包怎么获取并处理login页面的form数据的。
例子:
package main
import(
“fmt”
“html/template”
“log”
“net/http”
“strings”
)
func syhelloName(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:=rang r.Form{
fmt.Println(“key:”,k)
fmt.Println(“val:”,strings.Join(v,””))
}
fmt.Fprintf(w http.ResponseWriter,r *http.Request){
fmt.Println(“method:”,r.Method)//获取请求的方法
if r.Method==”GET”{
t,_:=template.ParseFiles(“login.gtpl”)
t.Execute(w,nil)
} else {
r.ParseForm()
//请求的是登陆数据,那么执行登陆逻辑判断
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来完成的,这是个字符串类型的变量,返回信息。
运行起来输入用户名和密码之后,发现在服务器端显示出响应的请求类型及你输入的用户名和密码。例子比较简单,但是已经把我们要介绍的信息有一个了解,下篇我们接着将表单的一些信息。
请开始你的表演,践行,践行,再践行。未完待续。。。
网友评论