go web 處理表單的輸入的說明
一 目錄結(jié)構(gòu)
二 前端頁(yè)面
文件名:login.html
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <input type="submit" value="登陸"> </form> </body> </html>
上面遞交表單到服務(wù)器的 /login,當(dāng)用戶輸入信息點(diǎn)擊登陸之后,會(huì)跳轉(zhuǎn)到服務(wù)器的路由 login 里面。
三 后端處理
package main import ( "fmt" "html/template" "log" "net/http" "strings" ) // 處理 sayhelloName func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() // 解析 url 傳遞的參數(shù),對(duì)于 POST 則解析響應(yīng)包的主體(request body) // 注意: 如果沒有調(diào)用ParseForm方法,下面無法獲取表單的數(shù)據(jù) fmt.Println(r.Form) // 這些信息是輸出到服務(wù)器端的打印信息 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!") // 這個(gè)寫入到 w 的是輸出到客戶端的 } // 登錄邏輯 func login(w http.ResponseWriter, r *http.Request) { fmt.Println("method:", r.Method) // 獲取請(qǐng)求的方法 if r.Method == "GET" { t, _ := template.ParseFiles("src\\goweb\\demo3\\login.html") // 解析模板 t.Execute(w, nil) // 渲染模板,并發(fā)送給前端 } else { // 請(qǐng)求的是登陸數(shù)據(jù),那么執(zhí)行登陸的邏輯判斷 // 解析表單 r.ParseForm() fmt.Println("username:", r.Form["username"]) fmt.Println("password:", r.Form["password"]) } } func main() { http.HandleFunc("/", sayhelloName) // 設(shè)置訪問的路由 http.HandleFunc("/login", login) // 設(shè)置訪問的路由 err := http.ListenAndServe(":9090", nil) // 設(shè)置監(jiān)聽的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } }
獲取請(qǐng)求方法是通過 r.Method 來完成的,這是個(gè)字符串類型的變量,返回 GET、POST、PUT等 method 信息。
login 函數(shù)中我們根據(jù) r.Method 來判斷是顯示登錄界面還是處理登錄邏輯。
當(dāng) GET 方式請(qǐng)求時(shí)顯示登錄界面,其他方式請(qǐng)求時(shí)則處理登錄邏輯,如查詢數(shù)據(jù)庫(kù)、驗(yàn)證登錄信息等。
四 測(cè)試
1 在瀏覽器里面打開 http://127.0.0.1:9090/login
2 頁(yè)面顯示為
3 輸入用戶名 admin ,密碼 123456
后臺(tái)打印如下:
method: GET
map[]
path /favicon.ico
scheme
[]
method: POST
username: [admin]
password: [123456]
map[]
path /favicon.ico
scheme
[]
五 說明
Reques 本身也提供了 FormValue() 函數(shù)來獲取用戶提交的參數(shù)。如r.Form["username"]也可寫成r.FormValue("username")。調(diào)用 r.FormValue 時(shí)會(huì)自動(dòng)調(diào)用 r.ParseForm,所以不必提前調(diào)用。r.FormValue 只會(huì)返回同名參數(shù)中的第一個(gè),若參數(shù)不存在則返回空字符串。
以上就是go web 處理表單的輸入的詳細(xì)內(nèi)容,更多關(guān)于go處理表單輸入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
GO語(yǔ)言異常處理機(jī)制panic和recover分析
這篇文章主要介紹了GO語(yǔ)言異常處理機(jī)制panic和recover,分析了捕獲運(yùn)行時(shí)發(fā)生錯(cuò)誤的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解
這篇文章主要介紹了golang常用庫(kù):字段參數(shù)驗(yàn)證庫(kù)-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下2020-10-10go語(yǔ)言使用Chromedp實(shí)現(xiàn)二維碼登陸教程示例源碼
這篇文章主要為大家介紹了go語(yǔ)言使用Chromedp實(shí)現(xiàn)二維碼登陸示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Go語(yǔ)言中切片(slice)和數(shù)組(array)的區(qū)別詳解
Go語(yǔ)言中切片(slice)和數(shù)組(array)是兩種不同的數(shù)據(jù)結(jié)構(gòu),它們?cè)谟梅ê托袨樯嫌幸恍┲匾獏^(qū)別,所以本文就通過一些代碼示例給大家詳細(xì)的介紹一下Go語(yǔ)言中切片(slice)和數(shù)組(array)的區(qū)別,需要的朋友可以參考下2023-09-09