Skip to content

Commit 96896ce

Browse files
committed
Format and remove 04.1.md spaces
1 parent 449ec2c commit 96896ce

File tree

1 file changed

+63
-63
lines changed

1 file changed

+63
-63
lines changed

zh/04.1.md

+63-63
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,68 @@
33
先来看一个表单递交的例子,我们有如下的表单内容,命名成文件login.gtpl(放入当前新建项目的目录里面)
44
```html
55

6-
<html>
7-
<head>
8-
<title></title>
9-
</head>
10-
<body>
11-
<form action="/login" method="post">
12-
用户名:<input type="text" name="username">
13-
密码:<input type="password" name="password">
14-
<input type="submit" value="登陆">
15-
</form>
16-
</body>
17-
</html>
6+
<html>
7+
<head>
8+
<title></title>
9+
</head>
10+
<body>
11+
<form action="/login" method="post">
12+
用户名:<input type="text" name="username">
13+
密码:<input type="password" name="password">
14+
<input type="submit" value="登陆">
15+
</form>
16+
</body>
17+
</html>
1818
```
1919
上面递交表单到服务器的`/login`,当用户输入信息点击登陆之后,会跳转到服务器的路由`login`里面,我们首先要判断这个是什么方式传递过来,POST还是GET呢?
2020

2121
http包里面有一个很简单的方式就可以获取,我们在前面web的例子的基础上来看看怎么处理login页面的form数据
2222
```Go
2323

24-
package main
25-
26-
import (
27-
"fmt"
28-
"html/template"
29-
"log"
30-
"net/http"
31-
"strings"
32-
)
33-
34-
func sayhelloName(w http.ResponseWriter, r *http.Request) {
35-
r.ParseForm() //解析url传递的参数,对于POST则解析响应包的主体(request body)
36-
//注意:如果没有调用ParseForm方法,下面无法获取表单的数据
37-
fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
38-
fmt.Println("path", r.URL.Path)
39-
fmt.Println("scheme", r.URL.Scheme)
40-
fmt.Println(r.Form["url_long"])
41-
for k, v := range r.Form {
42-
fmt.Println("key:", k)
43-
fmt.Println("val:", strings.Join(v, ""))
44-
}
45-
fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的
24+
package main
25+
26+
import (
27+
"fmt"
28+
"html/template"
29+
"log"
30+
"net/http"
31+
"strings"
32+
)
33+
34+
func sayhelloName(w http.ResponseWriter, r *http.Request) {
35+
r.ParseForm() //解析url传递的参数,对于POST则解析响应包的主体(request body)
36+
//注意:如果没有调用ParseForm方法,下面无法获取表单的数据
37+
fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
38+
fmt.Println("path", r.URL.Path)
39+
fmt.Println("scheme", r.URL.Scheme)
40+
fmt.Println(r.Form["url_long"])
41+
for k, v := range r.Form {
42+
fmt.Println("key:", k)
43+
fmt.Println("val:", strings.Join(v, ""))
4644
}
47-
48-
func login(w http.ResponseWriter, r *http.Request) {
49-
fmt.Println("method:", r.Method) //获取请求的方法
50-
if r.Method == "GET" {
51-
t, _ := template.ParseFiles("login.gtpl")
52-
log.Println(t.Execute(w, nil))
53-
} else {
54-
//请求的是登陆数据,那么执行登陆的逻辑判断
55-
fmt.Println("username:", r.Form["username"])
56-
fmt.Println("password:", r.Form["password"])
57-
}
45+
fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的
46+
}
47+
48+
func login(w http.ResponseWriter, r *http.Request) {
49+
fmt.Println("method:", r.Method) //获取请求的方法
50+
if r.Method == "GET" {
51+
t, _ := template.ParseFiles("login.gtpl")
52+
log.Println(t.Execute(w, nil))
53+
} else {
54+
//请求的是登陆数据,那么执行登陆的逻辑判断
55+
fmt.Println("username:", r.Form["username"])
56+
fmt.Println("password:", r.Form["password"])
5857
}
59-
60-
func main() {
61-
http.HandleFunc("/", sayhelloName) //设置访问的路由
62-
http.HandleFunc("/login", login) //设置访问的路由
63-
err := http.ListenAndServe(":9090", nil) //设置监听的端口
64-
if err != nil {
65-
log.Fatal("ListenAndServe: ", err)
66-
}
58+
}
59+
60+
func main() {
61+
http.HandleFunc("/", sayhelloName) //设置访问的路由
62+
http.HandleFunc("/login", login) //设置访问的路由
63+
err := http.ListenAndServe(":9090", nil) //设置监听的端口
64+
if err != nil {
65+
log.Fatal("ListenAndServe: ", err)
6766
}
67+
}
6868

6969
```
7070
通过上面的代码我们可以看出获取请求方法是通过`r.Method`来完成的,这是个字符串类型的变量,返回GET, POST, PUT等method信息。
@@ -92,16 +92,16 @@ login函数中我们根据`r.Method`来判断是显示登录界面还是处理
9292
`request.Form`是一个url.Values类型,里面存储的是对应的类似`key=value`的信息,下面展示了可以对form数据进行的一些操作:
9393
```Go
9494

95-
v := url.Values{}
96-
v.Set("name", "Ava")
97-
v.Add("friend", "Jess")
98-
v.Add("friend", "Sarah")
99-
v.Add("friend", "Zoe")
100-
// v.Encode() == "name=Ava&friend=Jess&friend=Sarah&friend=Zoe"
101-
fmt.Println(v.Get("name"))
102-
fmt.Println(v.Get("friend"))
103-
fmt.Println(v["friend"])
104-
95+
v := url.Values{}
96+
v.Set("name", "Ava")
97+
v.Add("friend", "Jess")
98+
v.Add("friend", "Sarah")
99+
v.Add("friend", "Zoe")
100+
// v.Encode() == "name=Ava&friend=Jess&friend=Sarah&friend=Zoe"
101+
fmt.Println(v.Get("name"))
102+
fmt.Println(v.Get("friend"))
103+
fmt.Println(v["friend"])
104+
105105
```
106106
>**Tips**:
107107
>Request本身也提供了FormValue()函数来获取用户提交的参数。如r.Form["username"]也可写成r.FormValue("username")。调用r.FormValue时会自动调用r.ParseForm,所以不必提前调用。r.FormValue只会返回同名参数中的第一个,若参数不存在则返回空字符串。

0 commit comments

Comments
 (0)