Beego学习之路(三)
实战用户管理系统的实现
一、实现流程
1、从main包进入,跳转到路由
package main
import (
_ "cmdb/router" //设置路由
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
2、router包绑定结构体
package router
//包的顺序
//一:系统自带包
//二:第三方包
//三:自定义包
import (
"cmdb/controller"
"github.com/astaxie/beego"
)
func init() {
beego.AutoRouter(&controller.AuthController{}) //定义网页路由,在网址输入的时候切记加上auth结构
beego.AutoRouter(&controller.HomeController{}) //绑定
beego.AutoRouter(&controller.QueryController{})
}
3、Controller包进行绑定模板方法
package controller
import (
"cmdb/base/Controller/Base"
"cmdb/errors"
"cmdb/forms"
"cmdb/models"
"github.com/astaxie/beego"
"net/http"
)
type AuthController struct {
Base.MainController
}
//认证登录
func (c *AuthController) Login() {
form := &forms.LoginForm{}
e := errors.New()
//如果是get请求,直接请求页面
if c.Ctx.Input.IsGet() {
c.TplName = "auth/login.html"
}
//如果是post请求,验证数据
if c.Ctx.Input.IsPost() {
//获取用户提交数据
err := c.ParseForm(form) //解析表单
if err == nil {
user := models.GetUser(form.UserName)
if user == nil {
//用户不存在,将错误添加到map中
e.Add("default", "用户不存在")
} else if user.ValidPassword(form.PassWord) {
sessionKey := beego.AppConfig.DefaultString("auth::SessionKey", "user")
//用户密码正确
c.SetSession(sessionKey, user.Name) //设置Session
queryAction := beego.AppConfig.DefaultString("auth::QueryAction", "QueryController.Query")
Path := beego.URLFor(queryAction)
c.Redirect(Path, http.StatusFound) //跳转主页,返回状态码302
} else {
e.Add("default", "密码错误")
}
} else {
e.Add("default", "用户或者密码错误")
}
//验证成功
//验证失败
}
c.Data["form"] = form
c.Data["errors"] = e //将值传送给模板
c.TplName = "auth/login.html"
//如果是post请求,判断数据库的增删查改
//请求页面
}
func (c *AuthController) LoginOut() {
c.DestroySession() //清理Cookie
loginoutAction := beego.AppConfig.DefaultString("auth::LoginOutAction", "AuthController.Login")
c.Redirect(beego.URLFor(loginoutAction), http.StatusFound)
}
4、Views包储存模板网页
二、Cookie和Session
1、需要开启配置
(1)SessionOn=true/false
(2)储存位置:内存、文件、数据库
SessionProvider:file/mysql/redis
(3)存储的地址
SessionProviderConfig
(4)cookie中存储sessionid的名字
SessionName
(5)失效时间
SessionGCMaxLifetime=3600 s
2、操作
(1)存储Session
controller:SetSession key value
(2)获取Session
controller:GetSession key =>value interface{]
(3)销毁Session
controller:DelSession(key) //根据key删除
DestorySession() //删除全部
三、执行逻辑
1、Controller的执行过程
(1)init:初始化Controller;
(2)Prepare相关预设置条件;
(3)Reder可以将没有定义模板的函数,根据路由函数名响应为页面;
(4)Finish;
2、Prepare的用法
需要进行条件预设的组合条件预设结构体,不需要的直接组合beego.Controiller组合的结构体
四、hash加密密码加密
package main
import (
"errors"
"fmt"
"golang.org/x/crypto/bcrypt"
)
func main() {
//初始化密码
password := "123abc"
//hash加密
hash, err := bcrypt.GenerateFromPassword([]byte(password), 0) //加密密码
if err != nil {
panic(errors.New("hash Err"))
}
fmt.Println(string(hash))
//密码比较
flag := bcrypt.CompareHashAndPassword(hash, []byte("123abc"))
//如果flag为空的话则说明密码能够匹配上
fmt.Println(flag)
}
如果看完对自己有所帮助,请点赞支持,谢谢大家