教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)

Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)

发布时间:2021-04-29   编辑:jiaochengji.com
教程集为您提供Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)等资源,欢迎您收藏本站,我们将为您提供最新的Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)资源

添加编辑和保存功能

继续上篇文章【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,不存在则进行创建,通过表单提交进行保存,还可以继续修改并保存。

到此这篇关于“Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)
Go基础学习记录 - 编写Web应用程序 - 错误处理
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
php代码生成器好用吗
想系统学习GO语言(Golang
Go 语言到底适合干什么?
学习golang开始前的准备工作
解决PHP提交MYSQL数据库中文内容乱码方法
Go语言爱好者周刊:第 78 期 — 这道关于 goroutine 的题

[关闭]
~ ~