周威学Go从入门到放弃第二十一篇(工程化表单)

几经周折,终于把go的包,和目录使用搞明白了,也算有了一个相对完整的工程,代码里加了很多注释,如下。

总体目录:

周威学Go从入门到放弃第二十一篇(工程化表单)_第1张图片

router: 

package routers

import (
	"hello/controllers"
	"log"

	"github.com/astaxie/beego"
)

func init() {
	log.Println("------init------")
	beego.Router("/", &controllers.AddController{})
}

controller: 

package controllers

import (
	"hello/models"
	. "log"
	"time"

	"github.com/astaxie/beego"
)

type AddController struct {
	beego.Controller
}

func (this *AddController) Prepare() {
	Println("Prepare方法一定会执行 在get post等之前,在init之后")
}
func (this *AddController) Finish() {
	Println("Finish 在get post等之后")
}

func (this *AddController) Post() {
	u := models.Person{}
	if err := this.ParseForm(&u); err == nil {
		u.ToString(u)
	}

	this.Data["json"] = map[string]interface{}{"code": "200", "data": u}
	this.ServeJSON()
	//	this.Ctx.WriteString("登录成功")
}

func (this *AddController) 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"

}

model: 

package models

import (
	"strconv"
	"strings"
)

type Person struct {
	Id    int         `form:"-"`
	Name  interface{} `form:"username"` //别名,泛型接收
	Age   int         `form:"age"`
	Email string
}

func (person Person) ToString(p Person) string {
	//interface{} 转成 string类型   username.(string)
	//Id 和age int类型转string 用strconv.Itoa()    string convert 缩写
	return strings.Join([]string{strconv.Itoa(p.Id), p.Name.(string), strconv.Itoa(p.Age), p.Email}, "")
}

main: 

package main

import (
	_ "hello/routers" //代表只调用了init方法

	"github.com/astaxie/beego"
)

func main() {

	beego.Run()
}

view:





  Beego
  
  

  



  

Welcome to Beego

名字: 年龄: 邮箱:
作者:{{.Author}} 更新时间:{{.CreateTime}}

控制台: 

/usr/local/go/bin/go build [/Users/zhouwei/go/src/hello]
成功: 进程退出代码 0.
/Users/zhouwei/go/src/hello/hello  [/Users/zhouwei/go/src/hello]
2018/08/26 11:52:27 ------init------
2018/08/26 11:52:27.311 [I] [asm_amd64.s:2361]  http server Running on http://:8080
2018/08/26 11:52:33 Prepare方法一定会执行 在get post等之前,在init之后
2018/08/26 11:52:33 Finish 在get post等之后
2018/08/26 11:52:33.970 [D] [server.go:2694]  |            ::1| 200 |    990.823µs|   match| GET      /     r:/
2018/08/26 11:52:40 Prepare方法一定会执行 在get post等之前,在init之后
2018/08/26 11:52:40.665 [D] [server.go:2694]  |            ::1| 200 |    230.897µs|   match| POST     /     r:/
2018/08/26 11:52:40 Finish 在get post等之后

页面结果: 

周威学Go从入门到放弃第二十一篇(工程化表单)_第2张图片 

 

 

 

 

你可能感兴趣的:(Go,GO语言学习)