go语言实现一个简单的登陆注册web小程序

    最近学习golang也有一段时间了,基础差很少学了个大概,由于本人是java程序员,因此对web更感兴趣。根据《go web编程》中的例子改编一个更简单的例子,供新手参考,废话很少说,上菜: html

    这个例子使用到了beego框架和beedb框架,若是是go新手beego和beedb得本身去google下载安装。 java

    目录结构: mysql

index.go git


package controllers

import (
	"fmt"
	"github.com/astaxie/beego"
	"login/models"
)

type IndexController struct {
	beego.Controller
}

func (index *IndexController) Get() {
	sess := index.StartSession()
	username := sess.Get("username")
	fmt.Println(username)
	if username == nil || username == "" {
		index.TplNames = "index.tpl"
	} else {
		index.TplNames = "success.tpl"
	}

}

func (index *IndexController) Post() {
	sess := index.StartSession()
	var user models.User
	inputs := index.Input()
	//fmt.Println(inputs)
	user.Username = inputs.Get("username")
	user.Pwd = inputs.Get("pwd")
	err := models.ValidateUser(user)
	if err == nil {
		sess.Set("username", user.Username)
		fmt.Println("username:", sess.Get("username"))
		index.TplNames = "success.tpl"
	} else {
		fmt.Println(err)
		index.TplNames = "error.tpl"
	}
}
regist.go



package controllers

import (
	"fmt"
	"github.com/astaxie/beego"
	"login/models"
)

type RegistController struct {
	beego.Controller
}

func (this *RegistController) Get() {
	this.TplNames = "regist.tpl"
}

func (this *RegistController) Post() {
	var user models.User
	inputs := this.Input()
	//fmt.Println(inputs)
	user.Username = inputs.Get("username")
	user.Pwd = inputs.Get("pwd")
	err := models.SaveUser(user)
	if err == nil {
		this.TplNames = "success.tpl"
	} else {
		fmt.Println(err)
		this.TplNames = "error.tpl"
	}
}
models.go



package models

import (
	"database/sql"
	"errors"
	"fmt"
	"github.com/astaxie/beedb"
	_ "github.com/ziutek/mymysql/godrv"
)

type User struct {
	Id       int `PK`
	Username string
	Pwd      string
}

func getLink() beedb.Model {
	db, err := sql.Open("mysql", "root:root@tcp(192.168.1.81:3306)/test_my?charset=utf8")
	if err != nil {
		panic(err)
	}
	orm := beedb.New(db)
	return orm
}

func SaveUser(user User) error {
	orm := getLink()
	fmt.Println(user)
	err := orm.Save(&user)
	return err
}

func ValidateUser(user User) error {
	orm := getLink()
	var u User
	orm.Where("username=? and pwd=?", user.Username, user.Pwd).Find(&u)
	if u.Username == "" {
		return errors.New("用户名或密码错误!")
	}
	return nil
}

main.go 程序员


package main

import (
	//"fmt"
	"github.com/astaxie/beego"
	"login/controllers"
)

type MainController struct {
	beego.Controller
}

func main() {
	beego.SessionOn = true
	beego.RegisterController("/", &controllers.IndexController{})
	beego.RegisterController("/regist", &controllers.RegistController{})
	beego.Run()
}


error.tpl github



<html>
	<body>
            error
	</body>
</html>
success.tpl



<html>
	<body>
            successed
	</body>
</html>
index.tpl



<html>
	<body>
		<h1>login</h1>
		<form action="/" method="post">
			用户名:<input type="text" name="username"><br>
			密码:<input type="password" name="pwd"><br>
			<input type="submit" value="登陆"><br>
			<a href="/regist">注册</a>
		</form>
	</body>
</html>
regist.tpl
<html>
	<body>
		<h1>regist</h1>
		<form action="/regist" method="post">
			用户名:<input type="text" name="username"><br>
			密码:<input type="password" name="pwd"><br>
			<input type="submit" value="注册">
		</form>
	</body>
</html>

数据库用的是mysql,建表语句 golang

 

CREATE TABLE user (
id      INT,
username   VARCHAR(32),
pwd VARCHAR(32),
PRIMARY KEY(id) 
);

  程序跑起来是没有问题,可是session总是取不到数据,求大神解释! web

相关文章
相关标签/搜索