Beego以登录为例实现简单Ajax交互

仅作简单逻辑处理以走通流程,无阅读难度,前端模板采用Xadmin2.0的login.html,直接贴代码:
数据表user结构:
在这里插入图片描述
控制器login.go:

package controllers

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	"testbeego/models"
)

type LoginController struct {
	beego.Controller
	CommentController
}

func (c *LoginController) Login() {
	c.TplName = "login.html"
}

func (c *LoginController) LoginCheck(){
	ReturnData := make(map[string]interface{})
	var user models.User
	account := c.Input().Get("account")
	password := c.Input().Get("password")
	o := orm.NewOrm()
	user.Account = account
	err := o.Read(&user,"account")
	if err == orm.ErrNoRows{
		ReturnData["status"] =  -1
		ReturnData["message"] = "账号不存在"
	}else if err != nil{
		ReturnData["status"] =  -3
		ReturnData["message"] = "数据库查询错误:"+err.Error()
	}else{
		if password == user.Password{
			ReturnData["status"] =  1
			ReturnData["message"] = "登录成功"
			c.SetSession("userId",user.Id)
		} else{
			ReturnData["status"] =  -2
			ReturnData["message"] = "密码错误"
		}
	}
	c.Data["json"] = ReturnData
	c.ServeJSON()
	c.StopRun()
}

模型user.go:

package models

type User struct {
	Id  	    int 		`json:"id" orm:"column(id)"`
	Account 	string 		`json:"account" orm:"column(account)"`
	Password    string 		`json:"password" orm:"column(password)"`
	CreateTime  int         `json:"create_time" orm:"column(create_time)"`
	UpdateTime  int         `json:"update_time" orm:"column(update_time)"`
	Status      int         `json:"status"  orm:"column(status)"`
}

前端页面login.html:

<!doctype html>
<html  class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>Demo登录</title>
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <link rel="stylesheet" href="/static/xadmin2.0/css/font.css">
    <link rel="stylesheet" href="/static/xadmin2.0/css/login.css">
    <link rel="stylesheet" href="/static/xadmin2.0/css/xadmin.css">
    <script src="/static/js/jquery-3.3.1.min.js" charset="utf-8"></script>
    <script src="/static/js/jquery.cookie.js" charset="utf-8"></script>
    <script src="/static/xadmin2.0/lib/layui/layui.js" charset="utf-8"></script>
</head>
<body class="login-bg">
<div class="login layui-anim layui-anim-up">
    <div class="message">Demo登录</div>
    <div id="darkbannerwrap"></div>
    <form method="post" class="layui-form" id="login">
        <input name="account" placeholder="请输入账号"  type="text"  class="layui-input"  onkeydown="if(event.keyCode==13){document.getElementById('loginbtn').click();return false;}" >
        <hr class="hr15">
        <input name="password" placeholder="请输入密码"  type="password" class="layui-input"  onkeydown="if(event.keyCode==13){document.getElementById('loginbtn').click();return false;}" >
        <hr class="hr15">
        <input value="登录" lay-submit lay-filter="loginbtn" id="loginbtn" style="margin-top: 15px; width:100%;" type="button">
        <hr class="hr20" >
        <input value="注册账号" onclick="window.location.href='/register'" style="margin-top: 15px; width:100%;" type="button">
    </form>
</div>
<script src="/static/lib/layui/layui.js" charset="utf-8">
</script>
<script src="/static/js/x-layui.js" charset="utf-8">
</script>
<script type="text/javascript">
    layui.use(['form','layer'], function(){
        $ = layui.jquery;
        var form = layui.form()
            ,layer = layui.layer;

        form.on('submit(loginbtn)', function(data){
            $.ajax(
                {
                    type:'post',
                    url: "login/logincheck",
                    data: $('#login').serialize(),
                    dataType: 'json',
                    beforeSend: function () {
                        $("#loginbtn").attr({ disabled:true });
                    },
                    success: function(returndata){
                        if(returndata.status!==1)
                        layer.alert(returndata.message, {icon: 5},function (thiswindow) {
                            layer.close(thiswindow);
                            $("#loginbtn").attr({ disabled:false});
                        });
                        if(returndata.status==1)
                            layer.alert(returndata.message, {icon: 6},function (thiswindow) {
                                layer.close(thiswindow);
                                window.location.href = "/index";
                            });
                    },
                    error: function () {
                        $("#loginbtn").attr({ disabled:false});
                        layer.alert('请求错误,请稍后再试',{icon: 5});
                    }
                }
            )
        });
    });
</script>
</body>
</html>

基类控制器base.go:

package controllers

import (
	"github.com/astaxie/beego"
)

type BaseController struct {
	beego.Controller
}

type JsonReturn struct {
	Msg  string 	    `json:"msg"`
	Code int		    `json:"code"`
	Data interface{}	`json:"data"`
}

func (c *BaseController) ApiJsonReturn(msg string,code int,data interface{}) {
	var JsonReturn JsonReturn
	JsonReturn.Msg = msg
	JsonReturn.Code = code
	JsonReturn.Data = data
	c.Data["json"] = JsonReturn
	c.ServeJSON()
	c.StopRun()
}

func (c *BaseController) Prepare() {
	controller,action := c.Controller.GetControllerAndAction()
	userId := c.GetSession("userId")
	if userId == nil{
		c.Ctx.Redirect(302,"/login")
	}
}

入口main.go:

package main

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	"testbeego/models"
	_ "testbeego/routers"
)

func main() {
	registerModel()
	sessionConfig()
	ormConfig()
	beego.Run()
}

func registerModel()  {
	orm.RegisterModel(new(models.User))
}

func sessionConfig()  {
	beego.BConfig.WebConfig.Session.SessionOn = true
	beego.BConfig.WebConfig.Session.SessionGCMaxLifetime = 86400
}

func ormConfig()  {
	_ = orm.RegisterDriver("mysql", orm.DRMySQL)
	_ = orm.RegisterDataBase("default", "mysql", "root:jx5333136@/testbeego?charset=utf8")
}
发布了29 篇原创文章 · 获赞 1 · 访问量 7827

猜你喜欢

转载自blog.csdn.net/qq_38280150/article/details/102467721