• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

    这个例子使用到了beego框架和beedb框架,如果是go新手beego和beedb得自己去google下载安装。

    目录结构:

index.go


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



<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,建表语句

 

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go map数据结构和源码详解发布时间:2022-07-10
下一篇:
Go语言从入门到精通 - 变量的初始化发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap