内容简介:版权声明:本文为博主尹成联系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以上所述就是小编给大家介绍的《博客项目环境搭建和Model设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hyperledger Fabric环境搭建及环境测试(Mac环境)
- CV 环境很重要,各种环境搭建大全
- Openstack Queens 环境搭建(一)环境准备
- Python 环境搭建
- 1 - 搭建开发环境
- 搭建 Android 内核环境
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
应用Rails进行敏捷Web开发
Dave Thomas, David Hansson等 / 林芷薰 / 电子工业出版社 / 2006-7 / 65.00元
这是第一本关于Ruby on Rails的著作。 全书主要内容分为两大部分。在“构建应用程序”部分中,读者将看到一个完整的“在线购书网站” 示例。在演示的过程中,作者真实地再现了一个完整的迭代式开发过程,让读者亲身体验实际应用开发中遇到的各种问题、以及Rails如何有效解决这些问题。在随后的“Rails框架”部分中,作者深入介绍了Rails框架的各个组成部分。尤为值得一提的是本部分的后几章......一起来看看 《应用Rails进行敏捷Web开发》 这本书的介绍吧!