Go 언어로 웹 프레임워크 "Echo"②(매개변수 처리 요청)
Go 언어로 웹 사이트 만들기: 목록
http://qiita.com/y_ussie/items/8fcc3077274449478bc9
지난번 Hello World 편 1046791510에 이어
이번에는 요청 파라미터를 구해 봅시다.
이전 Hello World 편에서 HTML과 JSON은'Hello World'를 출력했고 이 문자열의'World'부분을 요구 매개 변수에 따라 전송해 보았다.
매개 변수를 받아들이는 방법은 다음과 같은 세 가지에 대응한다.
104679110 질의 매개변수(GET) 1046791810
104679110 형식(POST) 1046791810
하고 싶은 일
다음 요청을 처리합니다.
GET /hello?greetingto=xxx
검색 매개 변수에서 받은 "greetingto"매개 변수를 템플릿에 끼워넣기
Hello xxx!
의 문자열은 HTML을 통해 출력됩니다.
GET /api/hello?greetingto=xxx
조회 매개 변수를 통해 받은 "greetingto"매개 변수에 따라
다음 JSON으로 돌아갑니다.{"hello": "xxx"}
GET /hello_form
다음 양식을 내보냅니다.
http://qiita.com/y_ussie/items/ca8dc5e423eec318a436
HTML 템플릿은 다음 코드입니다.
template/hello_form.html{{define "content"}}
<form action="/hello" method="POST">
<label for="greetingto">Greeting To: </label>
<input type="text" id="greetingto" name="greetingto" />
<input type="submit" />
</form>
{{end}}
POST /hello
hello_form POST를 통해 얻은 "greetingto"매개 변수를 템플릿에 포함
Hello xxx!
의 문자열은 HTML을 통해 출력됩니다.
POST /api/hello
포스트 JSON.{"greetingto": "xxx"}
에서 가져온 "greetingto"매개 변수에 따라
다음 JSON으로 돌아갑니다.{"hello": "xxx"}
지난번 코드에 추가해 봤어요.
main.gopackage main
import (
"html/template"
"io"
"net/http"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
// レイアウト適用済のテンプレートを保存するmap
var templates map[string]*template.Template
// Template はHTMLテンプレートを利用するためのRenderer Interfaceです。
type Template struct {
}
// Render はHTMLテンプレートにデータを埋め込んだ結果をWriterに書き込みます。
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return templates[name].ExecuteTemplate(w, "layout.html", data)
}
func main() {
// Echoのインスタンスを生成
e := echo.New()
// テンプレートを利用するためのRendererの設定
t := &Template{}
e.Renderer = t
// ミドルウェアを設定
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// 静的ファイルのパスを設定
e.Static("/public/css/", "./public/css")
e.Static("/public/js/", "./public/js/")
e.Static("/public/img/", "./public/img/")
// 各ルーティングに対するハンドラを設定
e.GET("/", HandleIndexGet)
e.GET("/hello", HandleHelloGet)
e.POST("/hello", HandleHelloPost)
e.GET("/hello_form", HandleHelloFormGet)
e.GET("/api/hello", HandleAPIHelloGet)
e.POST("/api/hello", HandleAPIHelloPost)
// サーバーを開始
e.Logger.Fatal(e.Start(":3000"))
}
// 初期化を行います。
func init() {
loadTemplates()
}
// 各HTMLテンプレートに共通レイアウトを適用した結果を保存します(初期化時に実行)。
func loadTemplates() {
var baseTemplate = "templates/layout.html"
templates = make(map[string]*template.Template)
templates["hello"] = template.Must(
template.ParseFiles(baseTemplate, "templates/hello.html"))
templates["hello_form"] = template.Must(
template.ParseFiles(baseTemplate, "templates/hello_form.html"))
}
// HandleIndexGet は Index のGet時のHTMLデータ生成処理を行います。
func HandleIndexGet(c echo.Context) error {
return c.Render(http.StatusOK, "hello", "world")
}
// HandleHelloGet は /hello のGet時のHTMLデータ生成処理を行います。
func HandleHelloGet(c echo.Context) error {
greetingto := c.QueryParam("greetingto")
return c.Render(http.StatusOK, "hello", greetingto)
}
// HandleHelloPost は /hello のPost時のHTMLデータ生成処理を行います。
func HandleHelloPost(c echo.Context) error {
greetingto := c.FormValue("greetingto")
return c.Render(http.StatusOK, "hello", greetingto)
}
// HandleHelloFormGet は /hello_form のGet時のHTMLデータ生成処理を行います。
func HandleHelloFormGet(c echo.Context) error {
return c.Render(http.StatusOK, "hello_form", nil)
}
// HandleAPIHelloGet は /api/hello のGet時のJSONデータ生成処理を行います。
func HandleAPIHelloGet(c echo.Context) error {
greetingto := c.QueryParam("greetingto")
return c.JSON(http.StatusOK, map[string]interface{}{"hello": greetingto})
}
// HelloParam は /api/hello が受けとるJSONパラメータを定義します。
type HelloParam struct {
GreetingTo string `json:"greetingto"`
}
// HandleAPIHelloPost は /api/hello のPost時のJSONデータ生成処理を行います。
func HandleAPIHelloPost(c echo.Context) error {
param := new(HelloParam)
if err := c.Bind(param); err != nil {
return err
}
return c.JSON(http.StatusOK, map[string]interface{}{"hello": param.GreetingTo})
}
지난번 코드를 바탕으로 이번 기능을 추가해 봤습니다.
주로 창에 표시되는 프로세서HandleHelloFormGet () 와POST용 프로세서가 추가되었습니다
HandleHelloPost(),HandleAPI HelloPost().
HandleHelloGet()과 HandleAPI HelloGet()에서 질의 매개변수 처리가 증가하고 있습니다.
질의 매개 변수는 echo입니다.Context#QueryParam()에서 사용할 수 있습니다.
HandleHelloPost()는 양식 매개변수 POST를 적용합니다.
표 매개 변수는 echo입니다.Context#FormValue()를 통해 가져올 수 있습니다.
HandleAPIHelloPost()는 JSON POST 처리를 받습니다.
POST 이후의 JSON 매개 변수를 얻기 위해 먼저 JSON을 수신하는 구조체를 준비하고 구조체를
echo.Context#Bind()를 통해 구조체의 멤버로 사용할 수 있습니다.
실행 결과
POST /hello
POST /api/hello
다음 계획
쿠키 한번 해볼래요?
Reference
이 문제에 관하여(Go 언어로 웹 프레임워크 "Echo"②(매개변수 처리 요청)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y_ussie/items/2d397e70bfc38f75ca51
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{"hello": "xxx"}
{{define "content"}}
<form action="/hello" method="POST">
<label for="greetingto">Greeting To: </label>
<input type="text" id="greetingto" name="greetingto" />
<input type="submit" />
</form>
{{end}}
{"greetingto": "xxx"}
{"hello": "xxx"}
main.go
package main
import (
"html/template"
"io"
"net/http"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
// レイアウト適用済のテンプレートを保存するmap
var templates map[string]*template.Template
// Template はHTMLテンプレートを利用するためのRenderer Interfaceです。
type Template struct {
}
// Render はHTMLテンプレートにデータを埋め込んだ結果をWriterに書き込みます。
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return templates[name].ExecuteTemplate(w, "layout.html", data)
}
func main() {
// Echoのインスタンスを生成
e := echo.New()
// テンプレートを利用するためのRendererの設定
t := &Template{}
e.Renderer = t
// ミドルウェアを設定
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// 静的ファイルのパスを設定
e.Static("/public/css/", "./public/css")
e.Static("/public/js/", "./public/js/")
e.Static("/public/img/", "./public/img/")
// 各ルーティングに対するハンドラを設定
e.GET("/", HandleIndexGet)
e.GET("/hello", HandleHelloGet)
e.POST("/hello", HandleHelloPost)
e.GET("/hello_form", HandleHelloFormGet)
e.GET("/api/hello", HandleAPIHelloGet)
e.POST("/api/hello", HandleAPIHelloPost)
// サーバーを開始
e.Logger.Fatal(e.Start(":3000"))
}
// 初期化を行います。
func init() {
loadTemplates()
}
// 各HTMLテンプレートに共通レイアウトを適用した結果を保存します(初期化時に実行)。
func loadTemplates() {
var baseTemplate = "templates/layout.html"
templates = make(map[string]*template.Template)
templates["hello"] = template.Must(
template.ParseFiles(baseTemplate, "templates/hello.html"))
templates["hello_form"] = template.Must(
template.ParseFiles(baseTemplate, "templates/hello_form.html"))
}
// HandleIndexGet は Index のGet時のHTMLデータ生成処理を行います。
func HandleIndexGet(c echo.Context) error {
return c.Render(http.StatusOK, "hello", "world")
}
// HandleHelloGet は /hello のGet時のHTMLデータ生成処理を行います。
func HandleHelloGet(c echo.Context) error {
greetingto := c.QueryParam("greetingto")
return c.Render(http.StatusOK, "hello", greetingto)
}
// HandleHelloPost は /hello のPost時のHTMLデータ生成処理を行います。
func HandleHelloPost(c echo.Context) error {
greetingto := c.FormValue("greetingto")
return c.Render(http.StatusOK, "hello", greetingto)
}
// HandleHelloFormGet は /hello_form のGet時のHTMLデータ生成処理を行います。
func HandleHelloFormGet(c echo.Context) error {
return c.Render(http.StatusOK, "hello_form", nil)
}
// HandleAPIHelloGet は /api/hello のGet時のJSONデータ生成処理を行います。
func HandleAPIHelloGet(c echo.Context) error {
greetingto := c.QueryParam("greetingto")
return c.JSON(http.StatusOK, map[string]interface{}{"hello": greetingto})
}
// HelloParam は /api/hello が受けとるJSONパラメータを定義します。
type HelloParam struct {
GreetingTo string `json:"greetingto"`
}
// HandleAPIHelloPost は /api/hello のPost時のJSONデータ生成処理を行います。
func HandleAPIHelloPost(c echo.Context) error {
param := new(HelloParam)
if err := c.Bind(param); err != nil {
return err
}
return c.JSON(http.StatusOK, map[string]interface{}{"hello": param.GreetingTo})
}
지난번 코드를 바탕으로 이번 기능을 추가해 봤습니다.주로 창에 표시되는 프로세서HandleHelloFormGet () 와POST용 프로세서가 추가되었습니다
HandleHelloPost(),HandleAPI HelloPost().
HandleHelloGet()과 HandleAPI HelloGet()에서 질의 매개변수 처리가 증가하고 있습니다.
질의 매개 변수는 echo입니다.Context#QueryParam()에서 사용할 수 있습니다.
HandleHelloPost()는 양식 매개변수 POST를 적용합니다.
표 매개 변수는 echo입니다.Context#FormValue()를 통해 가져올 수 있습니다.
HandleAPIHelloPost()는 JSON POST 처리를 받습니다.
POST 이후의 JSON 매개 변수를 얻기 위해 먼저 JSON을 수신하는 구조체를 준비하고 구조체를
echo.Context#Bind()를 통해 구조체의 멤버로 사용할 수 있습니다.
실행 결과
POST /hello
POST /api/hello
다음 계획
쿠키 한번 해볼래요?
Reference
이 문제에 관하여(Go 언어로 웹 프레임워크 "Echo"②(매개변수 처리 요청)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y_ussie/items/2d397e70bfc38f75ca51
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
쿠키 한번 해볼래요?
Reference
이 문제에 관하여(Go 언어로 웹 프레임워크 "Echo"②(매개변수 처리 요청)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y_ussie/items/2d397e70bfc38f75ca51텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)