- 框架写法,原生写法:原生写法,简易表单
- form表单数据自动绑定model
- 框架接收url参数,post表单数据
上代码
表单代码:
<header>
<h1 class="logo">Welcome to Beego</h1>
<div class="description">
<form id="Person" action="/" method="post">
名字:<input name="username" type="text" />
年龄:<input name="age" type="text" />
邮箱:<input name="Email" type="text" />
<input type="submit" value="点击注册" />
</form>
</div>
</header>
<footer>
<div class="author">
作者:{{.Author}}
更新时间:{{.CreateTime}}
</div>
</footer>
<div class="backdrop"></div>
<script src="/static/js/reload.min.
package main
import (
"fmt"
"log"
"strconv"
"time"
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
type User struct {
id int64
name string
}
type Person struct {
Id int `form:"-"`
Name interface{} `form:"username"`
Age int `form:"age"`
Email string
}
func (this *MainController) Prepare() {
// log.Println("Prepare方法一定会执行 在get post等之前,在init之后")
}
func (this *MainController) Finish() {
// log.Println("Finish 在get post等之后")
}
func (this *MainController) Get() {
//不同环境的配置读取
username_dev := beego.AppConfig.String("dev::username")
//返回到页面
//this.Ctx.WriteString(rs)
//传参数给页面
this.Data["Author"] = username_dev
this.Data["CreateTime"] = time.Now()
//跳转到相关页面
this.TplName = "index.tpl"
}
//restful 风格
func (this *MainController) Post() {
u := Person{}
if err := this.ParseForm(&u); err != nil {
//handle error
} else {
fmt.Println("用户名:", u.Name)
fmt.Println("年龄:", u.Age)
fmt.Println("邮箱:", u.Email)
}
this.Ctx.WriteString("登录成功")
}
func (this *MainController) GetUser() {
this.Ctx.WriteString("users")
}
func (this *MainController) GetUsers() {
params := this.Ctx.Input.Params()
for k, v := range params {
log.Println(k, v)
}
id := params[":id"]
type_ := params[":type"]
log.Println("___", id, type_)
this.Ctx.WriteString("users")
}
func (this *MainController) DeleteUser() {
var id int
id, _ = strconv.Atoi(this.Ctx.Input.Param(":id"))
log.Println("id:", id)
this.Ctx.WriteString("users")
}
func (this *MainController) UpdateUser() {
//获取path中的变量
username := this.Ctx.Input.Param(":username")
log.Println("username:", username)
user := User{id: 1, name: username}
log.Println(user)
this.Ctx.WriteString("update success")
}
func main() {
beego.Router("/", &MainController{})
//路径里多个参数的话用map来接收
beego.Router("/api/user/:type:int/:id:int", &MainController{}, "get:GetUsers")
//方法名要大写,大写是全局的 也可以直接一个路径定义多个方法
beego.Router("/api/user/?:id:int", &MainController{}, "get:GetUser;delete:DeleteUser")
//加问号 则http://localhost:8080/api/user 也可以匹配
beego.Router("/api/user/?:username", &MainController{}, "put:UpdateUser")
beego.Run()
}
代码说明:
<form id="Person" action="/" method="post">
提交绑定的model为Person,请求地址根路径下post方法
定义结构体的时候,直接绑定表单
type Person struct {
Id int `form:"-"`
Name interface{} `form:"username"`
Age int `form:"age"`
Email string
}
接收函数
//restful 风格
func (this *MainController) Post() {
u := Person{}
if err := this.ParseForm(&u); err != nil {
//handle error
} else {
fmt.Println("用户名:", u.Name)
fmt.Println("年龄:", u.Age)
fmt.Println("邮箱:", u.Email)
}
this.Ctx.WriteString("登录成功")
}