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  }