iris自定义结构体映射获取Form表单请求数据

目录结构

主目录readForm

  1. —— templates
  2. —— form.html
  3. —— main.go

代码示例

templates/form.html

  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="utf-8">
  4. </head>
  5. <body>
  6. <form action="/form_action" method="post">
  7. Username: <input type="text" name="Username" /> <br />
  8. Mail: <input type="text" name="Mail" /> <br />
  9. Select one or more: <br/>
  10. <select multiple="multiple" name="mydata">
  11. <option value='one'>One</option>
  12. <option value='two'>Two</option>
  13. <option value='three'>Three</option>
  14. <option value='four'>Four</option>
  15. </select>
  16. <hr />
  17. <input type="submit" value="Send data"/>
  18. </form>
  19. </body>
  20. </html>

main.go

  1. // package main包含一个关于如何使用ReadForm的示例,但使用相同的方法可以执行ReadJSON和ReadJSON
  2. package main
  3. import (
  4. "github.com/kataras/iris"
  5. )
  6. type Visitor struct {
  7. Username string
  8. Mail string
  9. Data []string `form:"mydata"`
  10. }
  11. func main() {
  12. app := iris.New()
  13. //设置视图html模板引擎
  14. app.RegisterView(iris.HTML("./templates", ".html").Reload(true))
  15. app.Get("/", func(ctx iris.Context) {
  16. if err := ctx.View("form.html"); err != nil {
  17. ctx.StatusCode(iris.StatusInternalServerError)
  18. ctx.WriteString(err.Error())
  19. }
  20. })
  21. app.Post("/form_action", func(ctx iris.Context) {
  22. visitor := Visitor{}
  23. err := ctx.ReadForm(&visitor)
  24. if err != nil {
  25. ctx.StatusCode(iris.StatusInternalServerError)
  26. ctx.WriteString(err.Error())
  27. }
  28. ctx.Writef("Visitor: %#v", visitor)
  29. })
  30. app.Post("/post_value", func(ctx iris.Context) {
  31. username := ctx.PostValueDefault("Username", "iris")
  32. ctx.Writef("Username: %s", username)
  33. })
  34. app.Run(iris.Addr(":8080"))
  35. }