博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)
阅读量:6836 次
发布时间:2019-06-26

本文共 1414 字,大约阅读时间需要 4 分钟。

添加编辑和保存功能

继续上篇文章【】

如果将上篇文章的逻辑进行构建并运行,试图访问一个不存在的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,不存在则进行创建,通过表单提交进行保存,还可以继续修改并保存。

转载地址:http://jkhkl.baihongyu.com/

你可能感兴趣的文章
Thrift的java和php数据交互
查看>>
后缀数组的学习(三):SA数组实现代码分析
查看>>
和为s的两个数字与和为s的连续正数序列
查看>>
CSS3与动画有关的属性transition、animation、transform对比
查看>>
hash
查看>>
分栏控制器
查看>>
【Python】str转datetime与datetime计算
查看>>
linux命令:系统裁剪之五dropbear嵌入式系统专用ssh服务
查看>>
linux下进制是如何转换?
查看>>
Android上关于view的事件问题
查看>>
Xendesktop 可基于物理机及虚拟机的桌面控制交付
查看>>
wordpress网站后台打开速度很卡很慢解决方法?
查看>>
#每天问自己个问题#6. SIP标准协议 RFC3261
查看>>
MFC的进程和线程,非正常终止
查看>>
chHANDLE_DLGMSG(windows核心编程)讲解
查看>>
acctmod-ftp.sh
查看>>
Android界面开发问题总结
查看>>
JAVA类型转换问题
查看>>
Centos版本 32或64位查看命令
查看>>
CentOS 7无线网卡驱动解决方法
查看>>