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

本文介绍了一个使用Go语言、beego框架和beedb库实现的简单登录注册Web应用。通过创建`IndexController`和`RegistController`处理GET和POST请求,实现了用户输入验证、数据存储以及会话管理。在遇到session无法获取数据的问题时,可以检查配置和代码逻辑。
摘要由CSDN通过智能技术生成

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

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

目录结构:

0454ed53b30bc22488a6e51f9599c824.png

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

error

success.tpl

successed

index.tpl

login

用户名:

密码:

注册

regist.tpl

regist

用户名:

密码:

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

CREATE TABLE user (

id INT,

username VARCHAR(32),

pwd VARCHAR(32),

PRIMARY KEY(id)

);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值