使用beego实现注册与登陆

使用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("登陆成功,欢迎您")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值