github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/03_form/demo04_server.go (about) 1 package main 2 3 import ( 4 "crypto/md5" 5 "fmt" 6 "html/template" 7 "io" 8 "log" 9 "net/http" 10 "strconv" 11 "time" 12 ) 13 14 //防止多次递交表单 15 16 func login4(w http.ResponseWriter, r *http.Request) { 17 fmt.Println("method:", r.Method) //获取请求的方法 18 19 if r.Method == http.MethodGet { 20 curtime := time.Now().Unix() // unix 时间戳 21 h := md5.New() 22 curtimeStr := strconv.FormatInt(curtime, 10) 23 fmt.Println(curtimeStr) 24 io.WriteString(h, curtimeStr) 25 token := fmt.Sprintf("%x", h.Sum(nil)) 26 fmt.Println("token ->", token) 27 t, _ := template.ParseFiles("test.gtpl") 28 t.Execute(w, token) 29 } else { 30 //请求的是登陆数据,那么执行登陆的逻辑判断 31 r.ParseForm() 32 token := r.Form.Get("token") 33 if token != "" { 34 //验证token的合法性 35 fmt.Println("token:", token) 36 } else { 37 //不存在token报错 38 fmt.Println("token有误。。") 39 } 40 fmt.Println("username length:", len(r.Form.Get("username"))) 41 fmt.Println("username:", template.HTMLEscapeString(r.Form.Get("username"))) //输出到服务器端 42 fmt.Println("password:", template.HTMLEscapeString(r.Form.Get("password"))) 43 template.HTMLEscape(w, []byte(r.Form.Get("username"))) //输出到客户端 44 } 45 46 } 47 48 func main() { 49 http.HandleFunc("/login4", login4) //设置访问的路由 50 err := http.ListenAndServe(":8000", nil) //设置监听的端口 51 if err != nil { 52 log.Fatal("ListenAndServe: ", err) 53 } 54 }