Files
the-way-to-go_ZH_CN/eBook/20.6.md
Haigang Zhou 1573212775 第二十章和第二十一章的翻译 (#831)
Co-authored-by: Joe Chen <jc@unknwon.io>
2022-05-19 20:05:42 +08:00

64 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 20.6 处理窗口
正如我们在 [15.6](15.6.md)/[7](15.7.md) 节中所看到的,`template` 包经常被用于 web 应用,所以也可以被用于 GAE 应用。下面的应用程序让用户输入一个文本。首先,一个留言簿表格显示出来(通过 `/` 根处理程序),当它被发布时,`sign()` 处理程序将这个文本替换到产生的 html 响应中。`sign()` 函数通过调用 `r.FormValue` 获得窗口数据,并将其传递给 `signTemplate.Execute()`,后者将渲染的模板写入 `http.ResponseWriter`
编辑文件 helloworld2.go用下面的 Go 代码替换它,并试运行:
<u>[Listing 20.4 helloworld2_version3.go:](examples\chapter_20\helloapp\hello\helloworld2_version3.go)</u>
```go
package hello
import (
"fmt"
"net/http"
"template"
)
const guestbookForm = `
<html>
<body>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>
`
const signTemplateHTML = `
<html>
<body>
<p>You wrote:</p>
<pre>{{html .}}</pre>
</body>
</html>
`
var signTemplate = template.Must(template.New("sign").Parse(signTemplateHTML))
func init() {
http.HandleFunc("/", root)
http.HandleFunc("/sign", sign)
}
func root(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
fmt.Fprint(w, guestbookForm)
}
func sign(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
err := signTemplate.Execute(w, r.FormValue("content"))
if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError)
}
}
```
## 链接
- [目录](directory.md)
- 上一节:[使用用户服务和探索其 API](20.5.md)
- 下一节:[使用数据存储](20.7.md)