일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 실행권한
- ftp
- PYTHON
- Jupyter Notebook
- nohup
- postgres
- nmap
- postgresql
- port forwarding
- appium
- create table
- openpyxl
- appium server
- sshpass
- 28015
- mysql
- SWIFT
- GoCD
- rethinkdb
- kitura
- Materials
- STF
- ubuntu
- perfect
- insert
- Jupyter
- centos
- nGrinder
- STF_PortForwarding
- ssh
- Today
- Total
don't stop believing
Map as querystring or postform parameters 본문
query string이나 post로 넘기는 데이터를 map 형식으로 사용하는 것은 이번에 처음 알게 되었습니다.
https://github.com/gin-gonic/gin#map-as-querystring-or-postform-parameters
아래와 같이 ids[a]=123 그리고 ids[b]=hello 처럼 사용할 수 있습니다.
/post?ids[a]=1234&ids[b]=hello
마찬가지로 html의 form에서도 map 형식의 데이터를 넘길 수 있습니다.
이번에는 tamplate을 사용해 html 페이지를 실행하겠습니다.
먼저 tamplates라는 폴더를 만들고 그 안에 note.html 파일을 만들어 줍니다. 그리고 아래와 같이 작성합니다.
<html> <head> <title>Tongchun's go gin</title> </head> <body> <h2>page: {{ .page }}</h2> <form action="http://localhost:8080/postMap?ids[a]=1234&ids[b]=hello" method="POST"> first name: <input type="text" name="names[first]"> family name: <input type="text" name="names[second]"> <input type="submit" value="Submit"> </form> </body> </html>
tamplate에 대해서는 다음에 자세히 설명하도록 하겠습니다.
우선 form tag의 action은 위에서 설명했던 것 처럼 map 형식으로 되어 있습니다.
http://localhost:8080/postMap?ids[a]=1234&ids[b]=hello
input에는 first name과 family name 두 개를 입력하는데 input tag의 name에도 map type처럼 names[first]와 name[second]로 되어 있습니다.
server.go 파일에는 아래와 같이 작성합니다.
package main import ( "net/http" "github.com/gin-gonic/gin" ) func setupRouter() *gin.Engine { // Disable Console Color // gin.DisableConsoleColor() r := gin.Default() r.GET("/note", func(c *gin.Context) { title := "map type query string" c.HTML(http.StatusOK, "note.html", gin.H{ "page": title, }) }) r.POST("/postMap", postMap) return r } func postMap(c *gin.Context) { ids := c.QueryMap("ids") names := c.PostFormMap("names") c.JSON(200, gin.H{ "status": "posted", "ids": ids, "names": names, }) } func main() { r := setupRouter() // r.LoadHTMLGlob("/Users/tongchunkim/go/src/github.com/dejavuwing/example/templates/*") r.LoadHTMLGlob("./example/templates/*") // Listen and Server in 0.0.0.0:8080 r.Run(":8080") }
지난번과 다른 점은 main() 함수에서 아래와 같이 LoadHTMLGlob()함수가 추가되었습니다.
r.LoadHTMLGlob("./example/templates/*")
해당 경로에 있는 파일을 template html 파일로 설정하는 것입니다.
그리고 setupRouter() 함수 안에 GET method로 /note 경로를 받게 했습니다.
r.GET("/note", func(c *gin.Context) {
title := "map type query string"
c.HTML(http.StatusOK, "note.html", gin.H{
"page": title,
})
})
c.HTML()을 사용하면 template을 이용해 html 파일이 출력되게 됩니다.
server.go를 실행해 봅니다.
$ go run ./example/server.go [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /note --> main.setupRouter.func1 (3 handlers) [GIN-debug] POST /postMap --> main.postMap (3 handlers) [GIN-debug] Loaded HTML Templates (3): - - index.html - note.html [GIN-debug] Listening and serving HTTP on :8080
server.go를 실행하면 ./example/templates/ 하위에 있는 html파일 리스트가 보입니다.
localhost:8080/note 경로를 실행해 봅니다.
first name과 family name에 내용을 넣고 Submit 버튼을 클릭합니다.
map 형태의 데이터가 json 데이터로 출력됩니다.
'Golang > Gin' 카테고리의 다른 글
Grouping routes (0) | 2019.03.04 |
---|---|
Upload files (0) | 2019.02.27 |
Another example: query + post form (0) | 2019.02.15 |
Multipart/Urlencoded Form (1) | 2019.02.14 |
Querystring parameters (0) | 2019.02.14 |