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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!