7.6. 编辑页面

编辑功能是wiki不可缺少的。现在,我们创建两个新的处理函数(handler):editHandler显示"edit page"表单(form),saveHandler保存表单(form)中的数据。

首先,将他们添加到main()函数中:

  func main() {
      http.HandleFunc("/view/", viewHandler)
      http.HandleFunc("/edit/", editHandler)
      http.HandleFunc("/save/", saveHandler)
      http.ListenAndServe(":8080", nil)
  }

函数editHandler加载页面(或者,如果页面不存在,创建一个空page 结构)并且显示为一个HTML表单(form)。

  func editHandler(w http.ResponseWriter, r *http.Request) {
      title := r.URL.Path[lenPath:]
      p, err := loadPage(title)
      if err != nil {
          p = &page{title: title}
      }
      fmt.Fprintf(w, "<h1>Editing %s</h1>"+
          "<form action=\"/save/%s\" method=\"POST\">"+
          "<textarea name=\"body\">%s</textarea><br>"+
          "<input type=\"submit\" value=\"Save\">"+
          "</form>",
          p.title, p.title, p.body)
  }

这个函数能够工作,但是硬编码的HTML非常丑陋。当然,我们有更好的办法。