rainbowzc

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
  688 随笔 :: 2 文章 :: 0 评论 :: 142万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

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

    目录结构:

index.go


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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



1
2
3
4
5
<html>
    <body>
            error
    </body>
</html>

success.tpl



1
2
3
4
5
<html>
    <body>
            successed
    </body>
</html>

index.tpl



1
2
3
4
5
6
7
8
9
10
11
<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

1
2
3
4
5
6
7
8
9
10
<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,建表语句

 

1
2
3
4
5
6
CREATE TABLE user (
id      INT,
username   VARCHAR(32),
pwd VARCHAR(32),
PRIMARY KEY(id)
);

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

posted on   ct  阅读(4545)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2011-06-29 量产USBCDROM后的PE无法加载外置程序的原因及解决方法(转)
2011-06-29 PE中添加外置程序(转载)
2010-06-29 vista开发注意事项及解决方案
2010-06-29 LNK2005 *** 已经在 *** lib中定义
点击右上角即可分享
微信分享提示