内容简介:登录和退出的流程:首先,我们需要开启 session,在文件 app.conf 中加入如果未开启直接访问session可能会报如下错误:
登录和退出的流程:
- 输入用户名、密码传到后台
- 数据库查询结果是否匹配
- 匹配成功保存 session 跳转首页
- 退出登录 删除session 这里用到了beego的三个知识点:session | 数据库查询 | 跳转
1. 设置session
首先,我们需要开启 session,在文件 app.conf 中加入
sessionon = true
如果未开启直接访问session可能会报如下错误:
goblog:runtime error: invalid memory address or nil pointer dereference
1.1 设置session
这里提到的变量 c
即是控制器中传入的指针对象
c.SetSession("Username","bego")
1.2 获取session
c.GetSession("Username")
1.3 删除session
c.DelSession("Username")
session的详细讲解参见:https://www.kancloud.cn/hello123/beego/126126
2. 跳转重定向
我们查询到 beego 的跳转在控制器中已经封装好了,直接调用就好
func (c *MainController) Get() {
username := c.GetSession("Username")
if username == nil {
c.Redirect("/user/login",302)
return
}
//other code
}
更多细节参见跳转重定向:https://www.kancloud.cn/hello123/beego/126123
3. 数据库读取
这里我们用到了 orm
的 Read
方法,需要一个'User' 指针,并使用字段 name
、 password
匹配
func (user User) GerOne() (int,error) {
orm.Debug = true
o := orm.NewOrm()
if err := o.Read(&user,"name","password"); err != nil || user.Id <= 0 {
return 0, errors.New("用户名或密码错误")
} else {
return user.Id,nil
}
}
更多数据库查询细节参见:https://www.kancloud.cn/hello123/beego/126104
4. 代码实例(核心部分)
4.1 访问首页
路由
beego.Router("/", &controllers.MainController{})
模板
<div class="description">
欢迎回来,{{.Username}} <button class="btn btn-default" onclick="logout()">退出</button>
</div>
<script>
//登出功能
function logout(){
$.ajax({
type:'post',
url:'/user/logout',
data:{},
success:function(result){
if(result.State > 0){
alert(result.Message)
}else {
alert("退出成功");
location.href = "/"
}
}
})
}
</script>
控制器
func (c *MainController) Get() {
username := c.GetSession("Username")
if username == nil {
c.Redirect("/user/login",302)
return
}
c.Data["Username"] = username
c.TplName = "index.tpl"
}
4.2 登录页
路由
beego.Router("/user/login", &controllers.UserController{},"get:Login")
beego.Router("/user/sign", &controllers.UserController{},"post:Sign")
beego.Router("/user/logout", &controllers.UserController{},"post:Logout")
模板
<div class="container">
<div class="form-group">
<label for="text">用户名:</label>
<input type="text" class="form-control" id="name" placeholder="用户名">
</div>
<div class="form-group">
<label for="text">密码:</label>
<input type="password" class="form-control" id="password" placeholder="密码">
</div>
<div class="form-group">
<button class="btn btn-primary" onclick="login()">登陆</button>
<button class="btn btn-primary" onclick="register()">注册</button>
</div>
</div>
<script type="text/javascript">
//登陆功能
function login(){
$.ajax({
type:'post',
url:'/user/sign',
data:{
"name":$("#name").val(),
"password":$("#password").val()
},
success:function(result){
if(result.State > 0){
alert(result.Message)
}else {
alert("登录成功");
location.href = "/"
}
}
})
}
function register() {
location.href = "/user/register"
}
</script>
控制器
func (c *UserController) Login() {
c.TplName = "login.tpl"
}
func (c *UserController) Sign() {
user := models.User{}
user.Name = c.Input().Get("name")
user.Password = c.Input().Get("password")
response := ResponseJson{State:0,Message:"ok"}
if user.Name == "" || user.Password == ""{
response.State = 500
response.Message = "用户名或密码不能为空"
}else {
if id,err := user.GerOne(); err != nil || id == 0 {
response.State = 500
response.Message = err.Error()
} else {
c.SetSession("Username",user.Name)
}
}
c.Data["json"] = response
c.ServeJSON()
}
func (c *UserController) Logout() {
c.DelSession("Username")
response := ResponseJson{State:0,Message:"ok"}
c.Data["json"] = response
c.ServeJSON()
}
模型
/**
查询单个用户信息
*/
func (user User) GerOne() (int,error) {
orm.Debug = true
o := orm.NewOrm()
if err := o.Read(&user,"name","password"); err != nil || user.Id <= 0 {
return 0, errors.New("用户名或密码错误")
} else {
return user.Id,nil
}
}
项目所在github地址:https://github.com/wujiangweiphp/beegostudy
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python for Data Analysis
Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99
Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!