内容简介:版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068828
版权声明:本文为博主尹成联系QQ77025077,微信18510341407原创文章,欢迎转载侵权不究。 https://blog.csdn.net/yincheng01/article/details/84068828
#准备工作:
a.下载goland,安装 go 环境,在 mysql 创建数据库beego_blog,然后导入beego_blog.sql
b.然后安装beego和开发工具
go get -u github.com/astaxie/beego go get -u github.com/beego/bee
c.或许还需要安装go-mysql的驱动
go get github.com/go-sql-driver/mysql
c.然后在你的gopath的src目录下执行:
bee new beego_blog
然后看见自动创建的beego_blog文件夹,进入beego_blog文件夹,将默认的static文件夹和views文件夹替换成自己的static文件夹和views文件夹,并执行:
bee run
访问 http://localhost:8080/
出现welcome to beego画面表示准备工作完成,然后就可以开始我们的开发了。
#Mode设计
##表结构分析
根据 sql 脚本分析可得出表之间的关系如下:
tb_link:友情链接表 id:主键,自增长 sitename:网站名称 url:网址 rank:排序值 tb_mood:说说表 id:主键,自增长 content:说说内容 cover:说说封面 posttime:发表时间 tb_post:文章表 id:主键,自增长 userid:创建者id author:作者 title:标题 color:标题的颜色 content:文章的内容 tags:标签名称(所属分类) views:浏览量 status:状态 posttime:发布时间 updated:更新时间 istop:是否置顶 cover:封面 tb_tag:标签表 id:主键,自增长 name:名称 count:文章数量 tb_tag_post:标签文章表 id:主键,自增长 tagid:标签id postid:文章id poststatus:状态 posttime:发表时间 tb_user:管理员表 id:主键,自增长 username:用户名 password:密码 email:邮箱 logincount:登陆次数 authkey: active:是否激活
tb_post表和tb_tag表之间的关系:
文章表和标签表之间是多对多的关系,因为某一篇文章(go语言数组)可以属于多个标签(go,数组),然而某个标签中可以存在多篇文章。
1.根据文章id查找其对应的一个分类,首先在标签文章表中找到该文章id所对应的标签id,然后去标签表中根据标签id查找对应的记录。
2.根据标签id查找该标签下的所有文章,首先在标签文章表中找到对应文章id(11,12,16,22,23),在文章表中根据这些文章id查找对应的记录(select * from tb_post where id in (11, 12,16,22,23))
##设置配置文件
当我们在创建项目的时候,bee哦已经在app.conf文件中为我们配置了一些默认信息,但是这些信息对于我们这个博客项目来说远远不够,需要我们自己去配置相关的信息,例如:连接数据库的信息,网站头部信息等等。
appname = beego_blog httpport = 8080 runmode = dev dbprefix = tb_ dbhost = 127.0.0.1 dbport = 3306 dbuser = root dbpassword = 111111 dbname = beego_blog title = 兄弟连 keywords = 区块链学院 description = 兄弟连区块链学院成立于2018年7月1日 version = 1.0
##创建model
根据上面的表结构,在我们的项目中的models文件下创建项目的model,这些model和数据库中的表一一对应,在我们以后和数据的交互过程中扮演着重要角色,因为它们是我们项目和数据库交互的数据的载体,主要文件见下图:
其中base.go主要是获取配置文件中和数据库连接相关的信息,例如:登录密码,用户名等等,在获得这些信息之后注册模型,注册数据库,和数据连接。
package models import ( "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" "crypto/md5" "fmt" ) 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") dburl := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8" // set default database orm.RegisterDataBase("default", "mysql", dburl, 30) // register model orm.RegisterModel(new(Link), new(Mood), new(Post), new(Tag), new(TagPost), new(User)) }
Pager.go主要封装的是和分页相关的信息,例如:当前页码,每页显示的文章的数量等信息,其中ToString方法是核心,首先通过计算得出所要显示的页码,然后通过循环将页码和对应的rootpath写入a标签中,最后转换为字符串返回。
package models import ( "bytes" "fmt" ) type Pager struct { Page int //第几页 Pagesize int //每页大小 Totalnum int//总页数 urlpath string //每页所对应的url } //创建Pager对象 func NewPager(page, pagesize, totalnum int, urlpath string) *Pager { pager := new(Pager) pager.Page = page pager.Pagesize = pagesize pager.Totalnum = totalnum pager.urlpath = urlpath return pager } //修改page func (this *Pager) SetPage(page int) { this.Page = page } //修改pagesize func (this *Pager) SetPagesize(pagesize int) { this.Pagesize = pagesize } //设置总数量 func (this *Pager) SetTotalnum(totalnum int) { this.Totalnum = totalnum } //设置rootpath func (this *Pager) SetUrlpath(urlpath string) { this.urlpath = urlpath } func (this *Pager) url(page int) string { return fmt.Sprintf(this.urlpath, page) } func (this *Pager) ToString() string{//str2html //文章的总数量小于等于每页显示的文章的数量 if this.Totalnum <= this.Pagesize { return "" } //偏移量 offset := 5 //显示10个页码 linknum := 10 var totalpage int var from int//从哪一页开始显示 var to int //显示到哪一页 if this.Totalnum % this.Pagesize != 0 { totalpage = this.Totalnum / this.Pagesize + 1 }else { totalpage = this.Totalnum / this.Pagesize } //总的页码小于10,直接从第一页显示到最后一页 if totalpage < linknum { from = 1 to = totalpage }else { //计算开始显示的页码 from = this.Page - offset //计算结束页码 to = from + linknum //判断开始页码是否小于1 if from < 1 { from = 1 //结束页根据开始页来计算,1+10-1 to = from + linknum - 1 }else if to > totalpage {//结束页大于总页数 to = totalpage from = to - linknum + 1//20 - 10 + 1 = 11(11-20) } } //开辟空间 var buf bytes.Buffer buf.WriteString("<div class='page'>") //上一页 if this.Page > 1 { buf.WriteString(fmt.Sprintf("<a href='%s'>«</a>", this.url(this.Page-1)))//<< } for i := from; i <= to; i++ { if i == this.Page { //<b> 标签规定粗体文本。 buf.WriteString(fmt.Sprintf("<b>%d</b>", i)) }else { buf.WriteString(fmt.Sprintf("<a href='%s'>%d</a>", this.url(i), i)) } } //设置下一页标签 if this.Page < totalpage { buf.WriteString(fmt.Sprintf("<a href='%s'>»</a>", this.url(this.Page+1)))//>> } buf.WriteString("</div>") str := buf.String() return str }
其他的model中内容是和数据库意义对应的,完整代码可在github上获取。
学院Go语言视频主页
https://edu.csdn.net/lecturer/1928扫码获取海量视频及源码 QQ群:721929980
以上所述就是小编给大家介绍的《博客项目环境搭建和Model设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hyperledger Fabric环境搭建及环境测试(Mac环境)
- CV 环境很重要,各种环境搭建大全
- Openstack Queens 环境搭建(一)环境准备
- Python 环境搭建
- 1 - 搭建开发环境
- 搭建 Android 内核环境
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby on Rails 3 Tutorial
Michael Hartl / Addison-Wesley Professional / 2010-12-16 / USD 39.99
“Ruby on Rails™ 3 Tutorial: Learn Rails by Example by Michael Hartl has become a must read for developers learning how to build Rails apps.” —Peter Cooper, Editor of Ruby Inside Using Rails ......一起来看看 《Ruby on Rails 3 Tutorial》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
RGB CMYK 转换工具
RGB CMYK 互转工具