建立表單
使用者要發表博文,服務端需要建立一個表單,在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 協議》,轉載必須註明作者和本文連結