iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
0
Modern Web

BeeGo系列 第 9

Form and CSRF(1)

  • 分享至 

  • twitterImage
  •  

今天來講講怎麼做新增跟修改,新增跟修改主要是 Form 的處理。

BeeGo 可以直接從之前定義的 model 產生 form,首先在 controllers/myuser.go 裡新增一個 function

// controllers/myuser.go
// GetAddForm ...
func (c *MyUserController) GetAddForm() {
    c.Data["Form"] = &models.User{}
    c.TplName = "user/create.tpl"
}

接著修改 views/user/create.tpl ,讓他可以顯示 form

{{ template "base.tpl" . }}

{{ define "content" }}
  <h1>User - Create</h1>
  <form action="" method="post">
  {{ .Form|renderform }}
  <br/><input type="submit" />
  </form>
{{ end }}

調整 router

# routers/router.go
// 略
beego.Router("/myuser/create", &controllers.MyUserController{}, "get:GetAddForm")

最後瀏覽 http://localhost:8080/myuser/create/ 就可以看到 form 了。

不過這個 form 實在是有點醜,而且有以下問題:

  1. 有 Id,新增時不需要 Id;在編輯時,可能需要處理成 hidden
  2. Birthday 欄位沒有顯示出來
  3. renderform 是怎麼知道如何顯示 User 呢?
  4. 不美觀,沒有結合 bootstrap。

好,讓我們來一個一個解決。

前三者的原因是類似的,renderform 是依據 struct User 的定義來決定如何顯示的。這部份可以藉著修改 models/user.go ,在 struct 欄位後面加上 structtag 來處理。

type User struct {
    Id       int64     `orm:"auto" form:"-"`  // - 表示不顯示
    Name     string    `orm:"size(128)" form:"name"`
    Gender   string    `orm:"size(1)" form:"gender"`
    Birthday time.Time `orm:"type(datetime)" form:"birthday,date"`  // 改成這樣還是沒顯示
}

不過 Birthday 欄位還是沒有出現。

閱讀 Beego 的 templatefunc.go 以後,沒看出什麼端倪,決定這個 form 還是先用手刻的方式解決,等以後有看到什麼新資料再來處理。


上一篇
Template
下一篇
Form and CSRF(2)
系列文
BeeGo30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言