go语言实现一个简单的登录注册web小程序
最近学习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老是取不到数据,求大神解释!
go语言实现一个简单的登录注册web小程序的更多相关文章
- 7. Swift 基于Xmpp和openfire实现一个简单的登录注册
1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...
- 微信小程序组件构建UI界面小练手 —— 表单登录注册微信小程序
通过微信小程序中丰富的表单组件来完成登录界面.手机快速注册界面.企业用户注册界面的微信小程序设计. 将会用到view视图容器组件.button按钮组件.image图片组件.input输入框组件.che ...
- Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序
1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module ...
- 一个简单的加减乘除自动生成小程序(JAVA)
在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...
- 一个简单的加减乘除自动生成小程序升级版(JAVA)
import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...
- Angular之简单的登录注册
使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻…… 里面涉及到的知识点记录: 1.本地存储的操作 ...
- Python 实现简单的登录注册界面
Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...
- 用C语言编写一个简单的词法分析程序
问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...
- 用Go语言实现一个简单的聊天机器人
一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...
随机推荐
- ng-repeat指令应用
1.ng-repeat 一看就知道跟foreach等指令类似,用于循环重复.一般用于列表和表格中.用法如下: <tr ng-repeat="data in dataList" ...
- iOS 1 到 iOS 10 ,我都快老了
iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...
- 【java】:定时任务
PS:转 http://blog.csdn.net/lotusyangjun/article/details/6450421/
- 亲子之间,在于看懂,无关耐心zz
每当有人告诉我:『你对孩子真有耐心!』时,我总会想起我的金项链,当越来越多人说的时候,我就越想找出来,我翻箱倒柜的找,越心急却越找不到,那 一条金项链从我十八岁那一年一直戴在我的脖子上一直到女儿两岁, ...
- 【排列组合】bzoj3505 [Cqoi2014]数三角形
http://blog.csdn.net/zhb1997/article/details/38474795 #include<cstdio> #include<algorithm&g ...
- 【技术贴】VirtualBox给VDI格式的虚拟机扩容
新建立了一个虚拟机用来装一些比较烦的软件,比如数据库什么的,但是初始的时候硬盘放小了,找了很久才找到解决方案(我的数据库是动态大小的): 1.直接在虚拟机关闭的状态下,在设置-->存储--> ...
- Android Studio签名打包的两种方式
签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如 ...
- C2第七次作业解题报告
看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...
- Mac中brew的安装
brew是Mac OS的一个软件包管理工具,使用简单方便,就像ubuntu中的apt-get命令一样官方地址:http://brew.sh/index_zh-cn.html 终端下运行 /usr/bi ...
- Caffe学习系列(20):用训练好的caffemodel来进行分类
caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的caffemodel来对这张图片进行分类,那该怎么办呢? 如 ...