我们都知道,一个动态网站的核心就是数据的交互。而如何进行数据的交互,答案就是表单。我们通过提交表单,将需要保存的数据提交给后台处理程序。后台处理程序在经过过滤等其他处理,然后保存到数据库中。但我们需要展现他们的时候,我们再从数据库中取出他们。

首先简单介绍下什么是表单。表单是html中的一个基本元素,它设计的目的就是为了数据的交互。有两种提交表单的方式,一种是get,一种是post.

下面主要讲解go web中如何处理表单。

  1. 编写html表单页面,action为需要提交的后台处理url.
  2. 编写表单处理逻辑,嗲用request parseForm方法进行表单接收 r.PostForm.Get(“title”)接收具体的表单值
  3. 编写回显表单处理结果
<form method="post" action="formadd">
<textarea name="title"></textarea>
<button type="submit">添加新闻</button>
</form>

method是提交表单的方式,get是在url中提交,post是在header中提交

name是要提交给后台接收的值,这里是title.

func handleFormAdd(w http.ResponseWriter, r *http.Request) {
 r.ParseForm()
 title := r.PostForm.Get("title")
 //TODO:将数据保存到数据库,然后再显示到页面上
 db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test_new")
 if err != nil {
 panic(err)
 }
 db.Exec("insert into news set title = ?", title)
}

这里我们调用r.ParseForm()对表单提交的title字段进行接收,然后插入到数据库中。

func handleForm(w http.ResponseWriter, r *http.Request) {
 //数据库获取数据
 db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test_new")
 if err != nil {
 panic(err)
 }
 rows, err := db.Query("select id,title from news")
 if err != nil {
 panic(err)
 }
 var (
 id string
 title string
 )
 var news []string
 for rows.Next() {
 rows.Scan(&id, &title)
 news = append(news, title)
 }
 templates.ExecuteTemplate(w, "form.html", news)
}

然后我们调用handleForm方法回显表单处理结果,将新插入的数据显示在表单上。