内容简介:我们假定数据库是html就是个表单 + ajax提交数据 没什么可讲的解释一下: 4.1.
1. 准备表
我们假定数据库是 my_blog ,表名是 user
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2. 准备模板register.tpl
html就是个表单 + ajax提交数据 没什么可讲的
<!DOCTYPE html>
<html>
<head>
<title>用户注册</title>
<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script type="text/javascript" src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="form-group">
<label for="text">用户名:</label>
<input type="text" class="form-control" id="name" placeholder="用户名">
</div>
<div class="form-group">
<label for="text">密码:</label>
<input type="text" class="form-control" id="password" placeholder="密码">
</div>
<div class="form-group">
<button class="btn btn-primary" onclick="register()">注册</button>
<button class="btn btn-primary" onclick="login()">登录</button>
</div>
<div>
<label id="status"></label>
</div>
</div>
<!--JS部分-->
<script type="text/javascript">
//登陆功能
function register() {
$.ajax({
type: 'POST',
url: '/user/saveUser',
data: {
"name": $("#name").val(),
"password": $("#password").val()
},
success: function (result) {
if(result.State > 0){
alert(result.Message);
}else{
alert("注册成功");
//location.href = "/user/login"
}
}
})
}
</script>
</body>
</html>
3. 准备路由
~goblog/routers/router.go init
beego.Router("/user/register", &controllers.UserController{},"get:Register")
beego.Router("/user/saveUser", &controllers.UserController{},"post:SaveUser")
- 路由设置的参照来源:https://www.kancloud.cn/hello123/beego/126122
自定义方法及 RESTful 规则这一小节
4. 准备模型
~goblog/models user.go
package models
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
Id int
Name string `orm:"size(50)"`
Password string `orm:"size(50)"`
}
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL) //设置驱动
orm.RegisterDataBase("default", "mysql", "root:@/my_blog?charset=utf8", 30)//连接数据库
orm.RegisterModel(new(User)) //注册模型
}
/**
添加一条数据
*/
func (user User) SaveOne() (int, error) {
o := orm.NewOrm()
if created, id, err := o.ReadOrCreate(&user,"name"); err == nil {
if created {
return int(id) , nil
} else {
//更新
user.Id = int(id)
if num, err := o.Update(&user); err == nil && num > 0 {
return int(id) , nil
}
}
}
return 0 , fmt.Errorf("save fail")
}
解释一下: 4.1. imports 中有一行
_ "github.com/go-sql-driver/mysql"
这句话是引入 sql 驱动mysql, 由于 mysql 在当前包中没有显示的调用,所有会被编译错误 但是我们的orm中有需要,所以用 _ 来声明 是会触发调用mysql包的 init 函数
4.2 设置 struct 用来保存 user 表中的数据结构 一般有几个字段设置几个成员,根据名称设置值,注意两点: . 字段首字母大写 . 数据库中下划线改成大写首字母
4.3 init 函数中做了三件事,分别是注册驱动、连接mysql 和 注册模型 注册模型可能会出现
goblog:<Ormer> cannot use non-ptr model struct `goblog/models.User`
错误,这时候需要仔细检查调用者 orm 在传递user 结构体是是否为指针,有个很简单的判断方法
o := orm.NewOrm() err := o.Read(你的参数) fmt.Println(你的参数)
如果打印出来携带 & 那么就是正确的,因为orm传递过去的方法是指针类型,否则不带的话, 你需要在参数前面手动加上 &
4.4 有关模型的使用详细可参照 :https://www.kancloud.cn/hello123/beego/126104
5. 准备控制器
~goblog/controllers user.go
package controllers
import (
"github.com/astaxie/beego"
"goblog/models"
)
type UserController struct {
beego.Controller
}
type ResponseJson struct {
State int
Message string
Data int
}
func (c *UserController) Register() {
c.TplName = "register.tpl"
}
func (c *UserController) SaveUser() {
user := models.User{}
user.Name = c.Input().Get("name")
user.Password = c.Input().Get("password")
response := ResponseJson{State:0,Message:"ok"}
if id, err := user.SaveOne(); err != nil {
response.State = 500
response.Message = "保存失败,请稍后再试"
} else {
response.Data = id
}
c.Data["json"] = response
c.ServeJSON()
}
解释说明
5.1. 所有控制器都需要组合
type UserController struct {
beego.Controller
}
5.2. 如果我们返回的是json类型,我们需要先定义一个结构体
type ResponseJson struct {
State int
Message string
Data int
}
当然 结构体的名称和字段类型你可以随便起,但是结构体的名称和字段 首字母必须大写 ,否则你返回的 json可能是个空对象
使用json直接在函数里加上:
response := ResponseJson{State:0,Message:"ok"}
c.Data["json"] = response
c.ServeJSON()
更多类型返回细节可以参见 : https://www.kancloud.cn/hello123/beego/126130
5.3 获取web参数 可参见:https://www.kancloud.cn/hello123/beego/126125
6. 运行
bee run
本文github地址:待传
以上所述就是小编给大家介绍的《手摸手教你用beego实现留言本之二(实现注册模块)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 前端模块化架构设计与实现(二|模块接口设计)
- Go实现Python模块
- 【Node】详解模块的实现过程
- vue模块拖拽实现
- NodeJS 模块化的简易实现(commonJS)
- 从module的简单实现到模块化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Big Java Late Objects
Horstmann, Cay S. / 2012-2 / 896.00元
The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!