页面跳转流程
127.0.0.1/login 回车login.html -> (正确登陆) -> temp.html -> welcome.html
127.0.0.1/login 回车login.html -> (错误登陆) -> bad.html
127.0.0.1/logintemp 回车temp.html -> 先前没有登陆 -> login.html
127.0.0.1/logintemp 回车temp.html -> 先前有登陆 -> welcome.html
处理login.html
中登陆post的请求,方法位于user.go
控制文件中
func (c *UserController) Reallogin() { id, _ := c.GetInt("userid") // 获取表单数据 password := c.GetString("password") valid := validation.Validation{} valid.Required(id, "id") // 校验 valid.Required(password, "password") switch { // 判断是否有错 case valid.HasErrors(): fmt.Println(valid.Errors[0].Key + valid.Errors[0].Message) c.TplName = "bad.html" return } u := &class.User{ // 定义一个User对象,该对象在models/class中 Id: id, Password: password, } err := u.ReadDB() if err != nil { fmt.Println(err) c.TplName = "bad.html" return } c.DoLogin(*u) // 继承base.go c.TplName = "temp.html" }
继承base.go
,需要在代码中添加
type UserController struct { // beego.Controller BaseController }
base.go
代码
package controllers import ( "blog/06blog/models/class" "github.com/astaxie/beego" ) type BaseController struct { beego.Controller } func (c *BaseController) Prepare() { if c.IsLogin() { c.Data["user"] = c.GetSession("user").(class.User) } } func (c *BaseController) DoLogin(u class.User) { // 将登陆信息放入session中 c.SetSession("user", u) } func (c *BaseController) DoLogout() { // 删除session c.DestroySession() c.Abort("302") } func (c *BaseController) IsLogin() bool { // 判断是否登陆 return c.GetSession("user") != nil } func (c *BaseController) CheckLogin() { // 检查是否登陆,如果没有登陆就执行返回到/login连接 if !c.IsLogin() { c.Redirect("/login", 302) c.Abort("302") } }
处理temp.html
中的post请求,方法位于user.go
控制文件中
func (c *UserController) Check() { if c.IsLogin() { // 判断是否登陆,如果登陆就输出welcome.html页面 c.TplName = "welcome.html" } else { // 没有登陆就跳转到/login链接 c.Redirect("/login", 302) c.Abort("302") } }