使用beego实现注册与登陆
1.注册
(1) 先实现注册视图
(2)注册发送POST请求
(3)Beego处理传过来的数据
(4) 对数据进行判断
(5) 如果成功返回登陆界面
2.登陆
(1)登陆成功返回字符串
(2)登陆失败返回注册界面
1.实现注册功能
1、先写一个前端页面,用来实现注册功能
2、添加一个路由,从而实现跳转
3、在default中的get()函数中实现跳转
4、重写post()函数
(1)现有一个注册的试图,在views中新建一个H5文件,该文件写前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<h1>注册页面</h1>
<form method="post" action="/register">
用户名:<input type="test" name="userName"> //这个name的值在后面post()函数有用
密码:<input type="password" name="pwd"> ////这个name的值在后面post()函数有用
<input type="submit" name="注册">
</form>
</body>
</html>
(2)在routers中的router.go中添加路由
package routers
import (
"dengru/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/register", &controllers.MainController{})
}
(3)路由之后需要执行的是get()函数,因此需要实现前端功能必须在get()函数中做相关操作。(c.TplName = "register.html")
func (c *MainController) Get() {
c.TplName = "register.html" //只有加了这句,前端才会跳转到注册页面
}
(4)在controllers中的default.go中定义func (c *MainController) Post() 方法。
func (c *MainController) Post() {
//1.拿到数据
userName := c.GetString("userName") //因为是从前端拿数据,这个名称需要跟前端中的名称保持一致
pwd := c.GetString("pwd") //因为是从前端拿数据,这个名称需要跟前端中的名称保持一致
//2.对数据进行校验
if userName == "" || pwd == "" {
beego.Info("数据不能为空")
c.Redirect("/register",302) //重定向函数,如果发生错误页面重新回到/register,并返回错误码302
return
}
//3.插入数据库
o := orm.NewOrm()
user := models.User{}
user.Name = userName
user.Pwd = pwd
_,err := o.Insert(&user)
if err != nil{
beego.Info("插入数据库失败")
c.Redirect("/register",302)
return
}
//4.返回登陆界面
c.TplName = "login.html" //指定视图文件,同时可以给这个视图传递一些数据如在c.Data["errmsg"],优点就是能够传递数据
c.Redirect("/login",302) //跳转,不能传递数据。优点是速度快
}
强调:Redirect("/login",302) 参数1:url地址;参数2:http协议的状态码
状态码简介
1xx 请求已经被接收,需要继续发送请求 100
2xx 请求成功 200
3xx 请求资源被转移或请求被转接 302
4xx 请求失败 404
5xx 服务器错误 500
2.实现登陆功能
(1)先有一个登陆的视图,在views中新建一个H5文件,该文件写前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<h1>登陆界面</h1>
<form method="post" action="login.html">
用户名:<input type="test" name="userName">
密码:<input type="password" name="pwd">
<input type="submit" value="登陆">
</form>
</body>
</html>
(2)在routers中的router.go中添加路由
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/register", &controllers.MainController{})
//注意:当实现了自定义的get请求方法,请求将不会访问默认方法
beego.Router("/login", &controllers.MainController{},"get:ShowLogin;post:HandleLogin")
}
(3)路由之后需要执行的是get()函数,因此需要实现前端功能必须在get()函数中做相关操作。(c.TplName = "register.html")
重写Get()方法,当实现了自定义的get请求方法,请求将不会访问默认方法
func (c *MainController) ShowLogin(){
c.TplName = "login.html"
}
(4)重新Post()方法,在controllers中的default.go中定义func (c *MainController) HandleLogin() 方法。
func (c *MainController) HandleLogin(){
//1.拿到数据
userName := c.GetString("userName")
pwd := c.GetString("pwd")
//2.判断数据是否合法
if userName == "" || pwd == ""{
beego.Info("输入数据不合法")
c.TplName = "login.html"
return
}
//3.查询账号密码是否正确
o := orm.NewOrm()
user := models.User{}
user.Name = userName
err := o.Read(&user,"Name")
if err != nil{
beego.Info("查询失败")
c.TplName = "login.html"
return
}
//4.跳转
c.Ctx.WriteString("登陆成功,欢迎您")
}
804

被折叠的 条评论
为什么被折叠?



