import (
"demo03.cn/models"
"encoding/json"
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
)
type UserController struct {
beego.Controller
}
func (c *UserController) Reg() {
resp :=make(map[string]interface{})
defer c.RetData(resp)
//获取前端传过来的json的数据
_ = json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
//封装成结构体
o := orm.NewOrm()
user := models.User{}
user.Name = resp["name"].(string)
user.Password = resp["password"].(string)
id,err :=o.Insert(&user)
if err != nil{
resp["errmsg"]="注册失败"
return
}
resp["errmsg"]=fmt.Sprintf("注册成功,id:%d",id)
c.SetSession("name",user.Name)
}
// 格式化数据 返回json格式
func (c *UserController) RetData(resp map[string]interface{}) {
c.Data["json"] =resp
c.ServeJSON()
}
controller session.go
import (
"demo03.cn/models"
"encoding/json"
"github.com/astaxie/beego"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
)
type SessionController struct {
beego.Controller
}
//TODO 获取Session
func (c *SessionController) GetSessionData() {
logs.Info("connect success")
resp :=make(map[string]interface{})
defer c.RetData(resp)
user := models.User{}
session := c.GetSession("name")
if session!=nil {
user.Name = session.(string)
resp["msg"] = "获取成功"
resp["data"] = user
}else {
resp["msg"] = "获取失败"
logs.Info(user)
}
}
//删除对应的Session
func (c *SessionController) DeleteSessionData() {
resp := make(map[string]interface{})
defer c.RetData(resp)
c.DelSession("name")
resp["msg"]="删除成功"
}
// TODO 登录
func (c *SessionController) Login() {
resp := make(map[string]interface{})
defer c.RetData(resp)
//得到用户信息获取前端传递过来的json数据
_ = json.Unmarshal(c.Ctx.Input.RequestBody,&resp)
logs.Info(&resp)
//判断是否合法
if resp["name"] == nil || resp["password"] ==nil{
resp["msg"]="用户名和密码不可以为空!"
return
}
//与数据库匹配账号密码是否正确
o := orm.NewOrm()
user := models.User{Name:resp["name"].(string)}
name := resp["name"].(string)
qs := o.QueryTable("user")
err := qs.Filter("name",name).One(&user)
if err !=nil {
resp["msg"]="数据错误"
logs.Info("2222name=",resp["name"],"password:",resp["password"])
return
}
if user.Password != resp["password"] {
resp["msg"]="用户名或密码错误"
logs.Info("3333name=",resp["name"],"password:",resp["password"])
return
}
//添加Session
c.SetSession("name",resp["name"])
c.SetSession("user_id",user.Id)
//返回json数据给前端
resp["msg"]="登录成功"
}
func (c *SessionController) RetData(resp map[string]interface{}) {
c.Data["json"] =resp
c.ServeJSON()
}
import (
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Password string `json:"password"`
}
func init() {
// 映射model数据
orm.RegisterModel(new(User))
}
func init() {
beego.Router("/user/session",&controllers.SessionController{},"get:GetSessionData;delete:DeleteSessionData")
beego.Router("/user/sessions",&controllers.SessionController{},"post:Login")
beego.Router("/user/users",&controllers.UserController{},"post:Reg")
}
import (
_ "demo03.cn/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
"net/http"
"strings"
)
//
func main() {
ignoreStaticPath()
beego.Run()
}
func ignoreStaticPath() {
beego.InsertFilter("/",beego.BeforeRouter,TransparentStatic)
beego.InsertFilter("/*",beego.BeforeRouter,TransparentStatic)
}
func TransparentStatic(ctx *context.Context){
// 获取请求的url
orpath := ctx.Request.URL.Path
logs.Info("request url:",orpath)
//如果请求url包含api字段,说明指令应该取消静态资源重定向
if strings.Index(orpath,"user") >= 0{
return
}
// 静态资源重定向
//http.ServeFile(ctx.ResponseWriter,ctx.Request,"static/html"+ctx.Request.URL.Path)
http.ServeFile(ctx.ResponseWriter,ctx.Request,"static/img/img")
}
func init() {
// 设置数据库基本信息,相当于连接数据库
_ = orm.RegisterDataBase("default", "mysql", beego.AppConfig.String("dataSource"), 30)
// 生成表
_ = orm.RunSyncdb("default", false, true)
}