iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 24
1
Modern Web

Iris這個在go語言上地表最快的網頁框架系列 第 24

iris 的 form post

form POST

上一篇文章介紹少使用者發出請求的手段之一 query string,但是query string有長度限制,而且容易被攔截無隱私可言,所以本篇要介紹使用者發出請求的手段之二,form POST。

本文同步放置於此

iris的form POST

本篇介紹iris的 form POST,當然要先由什麼是form POST講起,再來才帶到關於iris的form POST怎麼處理,所以我們先由介紹form POST開始。

什麼是form POST

有興趣的讀者們可以先看看POST Http Wiki,這裡可以分成兩部分來說明,第一個是POST方法,另一個是form POST,這篇主要是說明form POST,所以我們針對form POST來說明,簡單說明這主題就是提交一個表單,所以接下來我們針對iris如何處理form POST

處理 iris的form POST

這裡我們使用docs-iris-go的例子來說明,請大家看看以下內容,首先是html的部分。

<form action="/" method="POST">
    <p>Check one or more colors</p>

    <label for="red">Red</label>
    <!-- name can be "colors" too -->
    <input type="checkbox" name="colors[]" value="red" id="red">
    <label for="green">Green</label>
    <input type="checkbox" name="colors[]" value="green" id="green">
    <label for="blue">Blue</label>
    <input type="checkbox" name="colors[]" value="blue" id="blue">
    <input type="submit">
</form>

上面是一個簡單的html的表單,當按下submit後送出表單,接下來看看下列例子來學習如何處理form POST

package main

import "github.com/kataras/iris/v12"

func main() {
    app := iris.New()
    app.RegisterView(iris.HTML("./templates", ".html"))

    app.Get("/", showForm)
    app.Post("/", handleForm)

    app.Listen(":8080")
}

func showForm(ctx iris.Context) {
    ctx.View("form.html")
}

type formExample struct {
    Colors []string `form:"colors[]"` // or just "colors".
}

func handleForm(ctx iris.Context) {
    var form formExample
    err := ctx.ReadForm(&form)
    if err != nil {
        ctx.StopWithError(iris.StatusBadRequest, err)
        return
    }

    ctx.JSON(iris.Map{"Colors": form.Colors})
}

中這個例子做了兩件事,其中之一是之前提過的綁定view,這裡綁定的內容就是前面的html的例子,另外一件事就是當收到使用者提交的表單要如何處理。

這裡的處理方式就是定義一個model然後呼叫ReadForm的方法來將提交的表單綁定成我們指定的model,如此我們就可以針對model來操作。

結論

本篇文章介紹了如何在iris內使用model binding的方式來處理form POST,除了表單外form POST還可以傳遞檔案,待下一篇再跟大家介紹該如何處理。


上一篇
iris的 query string
下一篇
iris 的 file upload
系列文
Iris這個在go語言上地表最快的網頁框架30

尚未有邦友留言

立即登入留言