goblog学习三
创建表单
用户要发表博文,服务端需要创建一个表单,在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")
读取保存表单的处理器是:
unc articlesStoreHandler(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 协议》,转载必须注明作者和本文链接
推荐文章: