beego搭建个人博客(一)

上次我准备用Java的ssm框架来搭建一个博客系统,我觉得后来觉得Java实在太罗嗦了,贼多的配置文件。最近接触了go的web开发,框架有beego,gin、revel以及iris,beego虽然很重量级,性能也差iris太远,但是它对国人的学习是十分有好的,首先它的作者是国人,理念呢也还是参照传统的mvc概念,加上详尽的文档是一个非常好的入门go web的框架,所以我决定使用beego搭建一个个人博客,前台展示使用layui,毕竟我比较懒!

准备工作:

a.下载Sublime Text3,安装go插件,在mysql创建数据库db_beego,然后导入db_beego.sql(在github上有,链接在文章最下面),主要就是创建了用户,文章,评论表并且插入几条测试数据,大家随便看下知道就可以了。

b.你的电脑肯定安装了go环境,然后安装beego,可以参考https://blog.csdn.net/suresand/article/details/79548796

$ go get -u github.com/astaxie/beego
$ go get -u github.com/beego/bee

直接安装beego的框架及开发工具

或许还需要安装go-mysql的驱动

go get github.com/go-sql-driver/mysql

c.然后在你的gopath的src目录下执行:

bee new blog

然后看见自动创建的blog文件夹,进入blog文件夹:

bee run

访问http://localhost:8080/出现welcome to beego画面表示准备工作完成,然后就可以开始我们的开发了,当然由于我的水平有限,有模糊的地方请大家详细参考beego文档https://beego.me/docs/intro/

一 配置文件
首先配置app.conf,这个app.conf配置文件可以做很多事,这里我们主要配置数据库的链接信息:

appname = blog
httpport = 8080
runmode = dev

# MYSQL地址
dbhost = localhost

# MYSQL端口
dbport = 3306

# MYSQL用户名
dbuser = root

# MYSQL密码
dbpassword = 你的密码

# MYSQL数据库名称
dbname = db_beego

# MYSQL表前缀
dbprefix = tb_

二 构建登陆逻辑
我在考虑是先把所有的结构搭出来,还是一个一个去实现呢,然后我选择了后者,因为这样可以更快的做出效果提升兴趣,所以我准备一上来就把登陆逻辑做个模版出来

a.首先我们需要将数据库连接注册到beego的orm中,这是各个操作都会用到的,在models文件下新建base.go:

package models

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

func Init() {
    dbhost := beego.AppConfig.String("dbhost")
    dbport := beego.AppConfig.String("dbport")
    dbuser := beego.AppConfig.String("dbuser")
    dbpassword := beego.AppConfig.String("dbpassword")
    dbname := beego.AppConfig.String("dbname")
    if dbport == "" {
        dbport = "3306"
    }
    dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8&loc=Asia%2FShanghai"
    orm.RegisterDataBase("default", "mysql", dsn)
    orm.RegisterModel(new(User))
}

//返回带前缀的表名
func TableName(str string) string {
    return beego.AppConfig.String("dbprefix") + str
}

上面这段代码还是很容易看懂的,就是初始化数据库连接,并且将User注册到orm里去

b.登录当然是跟用户相关了,在models继续新建user.go:

package models

import "time"

type User struct {
    Id         int
    Username   string
    Password   string
    Email      string
    LoginCount int
    LastTime   time.Time
    LastIp     string
    State      int8
    Created    time.Time
    Updated    time.Time
}

func (m *User) TableName() string {
    return TableName("user")
}

c.我们要注意不允许在未登录的情况下访问我们的controller,所以需要判断是否已经登录,在controller文件下新建base.go:

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
    "strings"
    "github.com/Echosong/beego_blog/models"
)

type baseController struct {
    beego.Controller
    o orm.Ormer
    controllerName string
    actionName     string
}

func (p *baseController) Prepare()  {
    controllerName, actionName := p.GetControllerAndAction()
    p.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10])
    p.actionName = strings.ToLower(actionName)
    p.o = orm.NewOrm();
    if strings.ToLower( p.controllerName) == "admin" && strings.ToLower(p.actionName)  !=  "login"{
        if p.GetSession("user") == nil{
            p.History("未登录","/admin/login")
            //p.Ctx.WriteString(p.controllerName +"==="+ p.actionName)
        }
    }

    //初始化前台页面相关元素
    if strings.ToLower( p.controllerName) == "blog"{

        p.Data["actionName"] = strings
  • 13
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值