Beego学习之路(三)

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() //删除全部

三、执行逻辑
Beego学习之路(三)

1、Controller的执行过程

(1)init:初始化Controller;

(2)Prepare相关预设置条件;

(3)Reder可以将没有定义模板的函数,根据路由函数名响应为页面;

(4)Finish;

2、Prepare的用法
Beego学习之路(三)
需要进行条件预设的组合条件预设结构体,不需要的直接组合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)
}

如果看完对自己有所帮助,请点赞支持,谢谢大家

上一篇:char和varchar的区别


下一篇:Go/Golang/Beego微服务基础实战