Go基礎學習記錄 - 編寫Web應用程式 - 添加編輯和儲存功能(二)

來源:互聯網
上載者:User

添加編輯和儲存功能

繼續上篇文章【Go基礎學習記錄 - 編寫Web應用程式 - 添加編輯和儲存功能(一)】

如果將上篇文章的邏輯進行構建並運行,試圖訪問一個不存在的wiki,比如/view/APageThatDoesntExist,將看到包含HTML的空頁面。
這是因為它忽略了loadPage的錯誤傳回值,並繼續嘗試填寫沒有資料的模板。
相反,如果請求的頁面不存在,它應該將用戶端重定### 處理不存在的頁面
修改下viewHandler來達到我們的需求,如下

func viewHandler(w http.ResponseWriter, r *http.Request) {    title := r.URL.Path[len("/view/"):]    p, err := loadPage(title)    if err != nil {        http.Redirect(w, r, "/edit/"+title, http.StatusFound)        return    }    renderTemplate(w, "view", p)}

http.Redirect函數將HTTP狀態碼http.StatusFound(302)和Location頭添加到HTTP響應中。
再次構建並運行程式,訪問/view/APageThatDoesntExist,會跳轉到/edit/APageThatDoesntExist。

儲存頁面功能

根據上篇文章的流程,我們來添加下saveHandler函數的處理邏輯,它將處理位於編輯頁面上的表單的提交。
先在main中加入對應的邏輯,如下

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

saveHandler實現處理常式如下:

func saveHandler(w http.ResponseWriter, r *http.Request) {    title := r.URL.Path[len("/save/"):]    body := r.FormValue("body")    p := &Page{        Title: title,        Body:  []byte(body),    }    p.save()    http.Redirect(w, r, "/view/"+title, http.StatusFound)}

頁面標題(在URL中提供)和表單的唯一欄位Body儲存在新頁面中。
然後調用save()方法將資料寫入檔案,並將用戶端重新導向到/view/page。
FormValue返回的值是string類型。
我們必須將該值轉換為[]byte,然後才能適應Page結構。
我們使用[]byte(body)來執行轉換。

到這裡整個的編輯和儲存就都完成了,我們可以再次進行構建程式,然後啟動

$ go build wiki.go$ ./wiki

訪問view/pageTitle,不存在則進行建立,通過表單提交進行儲存,還可以繼續修改並儲存。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.