win10+go+beego搭建使用者管理系統

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

win10+go+beego搭建使用者管理系統

經過兩天的從零開始研究學習,go程式的使用者crud系統終於搭建成功,很不錯吆。

go環境搭建

下載go1.9rc2.windows-amd64.msi,由於golang被牆,只能從其他網上下載。

採用預設安裝到C:\Go,開啟命令列,輸入go version
C:\Users\steve>go version
go version go1.9rc2 windows/amd64

建立C:\GOPATH檔案夾,添加環境變數

go開發工具安裝配置

下載eclipse-inst-win64.exe(4.6.3)並安裝
安裝goclipse外掛程式

因為GFC的封閉,我們需要先到https://github.com/GoClipse/goclipse.github.io/archive/master.zip下載GoClipse的安裝包,並解壓。然後開啟Eclipse(確保已經包含CDT),Help -> Install New Software…,然後選擇Add按鈕,輸入解壓後的Release目錄,選擇GoClipse,然後一直next就安裝成功了。安裝完成後需要重啟Eclipse。

勾選goclipse,下一步直至完成
開啟:Window>Preferences

下載gocode.exe,guru.exe,godef.exe也可以不配置

Beego安裝

下載並安裝好Git bash工具

開啟gitbash,輸入 go get github.com/astaxie/beego 。稍等片刻即可在GOPATH的src目錄下看到有\github.com\astaxie\beego目錄。

在gitbash中輸入 go get github.com/beego/bee 。稍等片刻即可在GOPATH的src目錄下看到有\github.com\beego\bee目錄,同時有很多依賴包被下載添加到\github.com目錄下。

建立項目

cd %GOPATH%/src
bee new hello
cd hello
bee run hello
在瀏覽器輸入127.0.0.1:8080就看到了運行結果(welcome to beego的歡迎頁面)

goeclipse開發

開啟eclipse,匯入hello項目

建立檔案,結構如下

app.conf

appname = hello
httpport = 8080
runmode = dev

db.host = localhost
db.port = 3306
db.user = root
db.pass = 123456
db.name = test
db.timezone = Asia/Shanghai

default.go

package controllers

import (
“github.com/astaxie/beego”
)

type MainController struct {
beego.Controller
}

func (c *MainController) Get() {
// c.Data[“Website”] = “beego.me”
// c.Data[“Email”] = “astaxie@gmail.com”
c.TplName = “user/usermanage.html”
}
func (c *MainController) Rsp(status bool, str string) {
c.Data[“json”] = &map[string]interface{}{“succ”: status, “msg”: str}
c.ServeJSON()
}

user.go

package controllers

import (
“fmt”
m “hello/models”
)

type UserController struct {
MainController
}

func (this *UserController) Index() {
user := this.GetSession(“userinfo”)
if user != nil {
this.Data[“userinfo”] = user
this.TplName = “main.html”
return
}
this.Redirect(“/”, 302)
}

func (this *UserController) UserIndex() {
this.TplName = “user/usermanage.html”
}

func (this *UserController) UserList() {
page, _ := this.GetInt64(“page”)
pageSize, _ := this.GetInt64(“rows”)
u := m.User{}
if this.GetString(“id”) != “” {
u.Id, _ = this.GetInt(“id”)
}
if this.GetString(“name”) != “” {
u.Name = this.GetString(“name”)
}
if this.GetString(“phone”) != “” {
u.Phone = this.GetString(“phone”)
}
nodes, cnt := m.GetUserList(page, pageSize, &u)
fmt.Println(cnt)
this.Data[“json”] = &map[string]interface{}{“total”: cnt, “rows”: &nodes}
this.ServeJSON()
}

func (this *UserController) UserDel() {
idstr := this.GetString(“ids”)
err := m.DelUser(idstr)
if err != nil {
this.Rsp(false, err.Error())
} else {
this.Rsp(true, “刪除成功”)
}
}

func (this *UserController) UserAdd() {
u := m.User{}
u.Id, _ = this.GetInt(“Id”)
if err := this.ParseForm(&u); err != nil {
this.Rsp(false, err.Error())
return
}
id, err := m.AddUser(&u)
if err == nil && id > 0 {
this.Rsp(true, “新增成功”)
return
} else {
this.Rsp(false, err.Error())
return
}
}

func (this *UserController) UserUpdate() {
u := m.User{}
if err := this.ParseForm(&u); err != nil {
this.Rsp(false, err.Error())
return
}
id, err := m.UpdateUser(&u)
if err == nil && id > 0 {
this.Rsp(true, “修改成功”)
return
} else {
this.Rsp(false, err.Error())
return
}

}

func (this *UserController) UserUpload() {

f, fh, err := this.GetFile("uploadFile")defer f.Close()if err != nil {    fmt.Println("get file error ", err)    this.Data["json"] = &map[string]interface{}{"path": "", "succ": false}    this.ServeJSON()} else {    fmt.Println(fh.Filename)    this.SaveToFile("uploadFile", "static/upload/"+fh.Filename)    this.Data["json"] = &map[string]interface{}{"path": "/static/upload/" + fh.Filename, "succ": true}    this.ServeJSON()}

}

init.go

package models

import (
“fmt”
“github.com/astaxie/beego”
“github.com/astaxie/beego/orm”
_ “github.com/go-sql-driver/mysql”
“net/url”
)

func init() {
dbhost := beego.AppConfig.String(“db.host”)
dbport := beego.AppConfig.String(“db.port”)
dbname := beego.AppConfig.String(“db.name”)
dbuser := beego.AppConfig.String(“db.user”)
dbpass := beego.AppConfig.String(“db.pass”)
timezone := beego.AppConfig.String(“db.timezone”)
if dbport == “” {
dbport = “3306”
}
dsn := dbuser + “:” + dbpass + “@tcp(” + dbhost + “:” + dbport + “)/” + dbname + “?charset=utf8”
// dsn := “root:123456@/test?charset=utf8”
if timezone != “” {
dsn = dsn + “&loc=” + url.QueryEscape(timezone)
}
fmt.Println(dsn)
orm.RegisterDataBase(“default”, “mysql”, dsn, 5, 30)
if beego.AppConfig.String(“runmode”) == “dev” {
orm.Debug = true
}
}

user.go

package models

import (
“errors”
“fmt”
“log”
“strconv”
“strings”
“time”

"github.com/astaxie/beego/orm""github.com/astaxie/beego/validation"

)

type User struct {
Id int
Name string form:"name" valid:"Required;MaxSize(20);MinSize(6)"
Pass string form:"pass" valid:"Required;MaxSize(20);MinSize(6)"
Email string form:"email" valid:"Required;Email"
Phone string form:"phone" valid:"Required;Mobile"
Image string form:"image" valid:"MaxSize(50);MinSize(6)"
Addr string form:"addr" valid:"MaxSize(30)" form:"name"
Regtime string
Birth string form:"birth"
Remark string valid:"MaxSize(200)" form:"remark"
}

func init() {
orm.RegisterModel(new(User))
}

func (u *User) TableName() string {
return “t_user”
}

func (this *User) ToString() string {
return fmt.Sprintf(“Id:%d\tName:%s”, this.Id, this.Name)
}

func checkUser(u *User) (err error) {
valid := validation.Validation{}
b, _ := valid.Valid(&u)
if !b {
for _, err := range valid.Errors {
log.Println(err.Key, err.Message)
return errors.New(err.Message)
}
}
return nil
}

func GetUserList(page int64, pageSize int64, user *User) (userlist []*User, count int64) {
o := orm.NewOrm()
qs := o.QueryTable(“t_user”)
var offset int64
if page > 1 {
offset = (page - 1) * pageSize
}
if user.Id != 0 {
qs = qs.Filter(“id__exact”, user.Id)
}
if user.Phone != “” {
qs = qs.Filter(“phone__contains”, user.Phone)
}
if user.Name != “” {
qs = qs.Filter(“name__contains”, user.Name)
}
qs.Limit(pageSize, offset).OrderBy(“-Id”).All(&userlist)
count, _ = qs.Count()
return userlist, count
}

func DelUser(idstr string) error {
ids := strings.Split(idstr, “,”)
num, err := orm.NewOrm().QueryTable(“t_user”).Filter(“id__in”, ids).Delete()
if num > 0 && err == nil {
return nil
} else {
return err
}
}

func AddUser(u *User) (int64, error) {
if err := checkUser(u); err != nil {
return 0, err
}
o := orm.NewOrm()
user := new(User)
user.Name = u.Name
user.Email = u.Email
user.Phone = u.Phone
user.Image = u.Image
user.Addr = u.Addr

//  tm2, _ := time.Parse("2006-02-02", u.Birth) //日期文字轉為時間戳記//  user.Birth = strconv.FormatInt(tm2.Unix(), 10)user.Birth = u.Birthuser.Remark = u.Remarkuser.Regtime = strconv.FormatInt(time.Now().Unix(), 10) //擷取目前時間戳id, err := o.Insert(user)return id, err

}

func UpdateUser(u *User) (int64, error) {
if err := checkUser(u); err != nil {
return 0, err
}
o := orm.NewOrm()
user := make(orm.Params)
if len(u.Name) > 0 {
user[“Name”] = u.Name
}
if len(u.Phone) > 0 {
user[“Phone”] = u.Phone
}
if len(u.Addr) > 0 {
user[“Addr”] = u.Addr
}
if len(u.Email) > 0 {
user[“Email”] = u.Email
}
if len(u.Birth) > 0 {
// tm, _ := time.Parse(“2006-02-02”, u.Birth) //日期文字轉為時間戳記
// user[“Birth”] = strconv.FormatInt(tm.Unix(), 10)
user[“Birth”] = u.Birth
}
if len(u.Image) > 0 {
user[“Image”] = u.Image
}
if len(u.Remark) > 0 {
user[“Remark”] = u.Remark
}
if len(user) == 0 {
return 0, errors.New(“update field is empty”)
}
var table User
num, err := o.QueryTable(table).Filter(“Id”, u.Id).Update(user)
return num, err
}

func GetUserByUsername(username string) (user User) {
user = User{Name: username}
o := orm.NewOrm()
o.Read(&user, “Name”)
return user
}

router.go

package routers

import (
“github.com/astaxie/beego”
“hello/controllers”
)

func init() {
beego.Router(“/”, &controllers.MainController{})
beego.Router(“/usermanage”, &controllers.UserController{}, “*:UserIndex”)
beego.Router(“/user/list”, &controllers.UserController{}, “*:UserList”)
beego.Router(“/user/add”, &controllers.UserController{}, “*:UserAdd”)
beego.Router(“/user/del”, &controllers.UserController{}, “*:UserDel”)
beego.Router(“/user/update”, &controllers.UserController{}, “*:UserUpdate”)
beego.Router(“/user/upload”, &controllers.UserController{}, “*:UserUpload”)
}

usermanage.html

{{template “../user/header.tpl”}}

命令列啟動bee

(以後可以直接啟動hello.exe)

瀏覽器開啟http://localhost:8080/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.