goblg學習三

0day 發表於 2021-03-22
Go

建立表單

使用者要發表博文,服務端需要建立一個表單,在main()中新增一個路由:

outer.HandleFunc("/articles/create", articlesCreateHandler).Methods("GET").Name("articles.create")

同時新增一個建立的處理器:

func  articlesCreateHandler(w http.ResponseWriter, r *http.Request) {}

在處理器中,載入表單的HTML格式,在這裡使用了模版。同時需要把main()中的router := mux.Newrouter()宣告,提升到包檔案:var router = NewRouter()

讀取表單

main() 中儲存表單的路由是:

router.HandleFunc("/articles", articlesStoreHandler).Methods("POST").Name("articles.store")

讀取儲存表單的處理器是:

func  articlesCreateHandler(w http.ResponseWriter, r *http.Request) {}

在這個處理器函式裡,需要對提交的資料進行驗證,如果title和body的“空”和“長度”驗證。先取得r.PostFormValue()值,然後用utf8.RuneCountInString()驗證長度(也可以用len())。錯誤資訊放在一個map型別的errors[]中。
在這裡需要建立一個表單資料的結構,用於儲存表單內容:

type ArticlesFormData struct {
Title, Body string
URL *url.URL
Errors map[string]string
}

在處理器中初始化結構體data,執行template.ParseFiles()賦值到tmpl,然後tmpl.Execute(w, data)

模版語法

<form action="{{ .URL }}" method="post">
{{ with pipeline }} T1 {{ end }}
{{ with pipeline }} T1 {{ else }} T0 {{ end }}
{{- .Name -}}
{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}
{{range pipeline}} T1 {{else}} T0 {{end}}

可以修改預設的雙大括號為{[ ]}:

template.New("test").Delims("{[", "]}").ParseFiles("filename.gohtml")
本作品採用《CC 協議》,轉載必須註明作者和本文連結