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

chengxw · · 15929 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

    最近学习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老是取不到数据,求大神解释!


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:chengxw

查看原文:go语言实现一个简单的登录注册web小程序

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

15929 次点击  ∙  1 赞  
加入收藏 微博
上一篇:golan web扫雷
6 回复  |  直到 2018-05-12 23:21:12
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传