使用beego框架开发个人博客(二)

设计Blog的后台的数据库

在 models中添加 blog.go,并添加博客中需要的各种字段

type BlogModel struct {
    Id       string     `bson:"_id"`
    Title    string     `bson:"title"`
    Summary  string     `bson:"summary"`
    Original string     `bson:"original"` //原始的markdown格式文本
    Content  string     `bson:"content"`  //渲染之后的html文本
    Date     time.Time  `bson:"date"`
    Tags     []TagModel `bson:"tags"`
}

type TagModel struct {
    Id   string `bson:"_id"`
    Name string `bson:"name"`
}

使用MongoDB的Go驱动mgo,封装相关的方法

单独创建一个文件夹 db,并添加 mongodb.go,常用的CRUD的封装,核心代码

  • 获取 Session
var globalS *mgo.Session

func init() {
    dialInfo := &mgo.DialInfo{
        Addrs:     []string{host},
        Timeout:   timeout,
        Source:    authdb,
        Username:  user,
        Password:  pass,
        PoolLimit: poollimit,
    }
    s, err := mgo.DialWithInfo(dialInfo)
    if err != nil {
        log.Fatal("create session error", err)
    }
    globalS = s
}
  • 连接,CURD封装

具体的封装的代码请参考 mgo CRUD封装

func connect(db, collection string) (*mgo.Session, *mgo.Collection) {
    ms := globalS.Copy()
    c := ms.DB(db).C(collection)
    return ms, c
}

func Insert(db, collection string, docs ...interface{}) error {
    ms, c := connect(db, collection)
    defer ms.Close()
    return c.Insert(docs...)
}

......

前后台交互

前端使用 ajaxPOST数据到后台,beego可以提供了一些方法获取request中的数据 请求而数据处理
请自行查看,核心代码
获取原始markdown数据方法 var origin = simplemde.value();,获取渲染后的html格式的内容方法 var content = simplemde.markdown(origin);

  • 前端
$('#submit').click(function(){
        var title = $("#blog-title").val();
        var origin = simplemde.value();
        var content = simplemde.markdown(origin);
        if(title.length == 0){
                $('#alert').show();
                $('#alert').text("请输入标题信息");
                setTimeout(function(){
                        $("#alert").hide();  
                },2000)
        }
        if(origin.length == 0){
                $('#alert').show();
                $('#alert').text("请输入具体的博客内容");
                setTimeout(function(){
                        $("#alert").hide();  
                },2000)
        }

        $.ajax({
                url:'/editor',
                method:'POST',
                data:{title:title,origin:origin,content:content},
                success:function(data){
                        alert(data)
                }
        })

})
  • 后端

使用 GetString()方法获取Request中的数据

func (this *EditorController) Post() {
    title := this.GetString("title")
    origin := this.GetString("origin")
    content := this.GetString("content")
    fmt.Println("post data", title, origin, content)

    this.ServeJSON()
}

提交内容到数据库

model 核心代码

const (
    database   = "Blog"
    collection = "BlogModel"
)

func (b *BlogModel) PostBlog(blog *BlogModel) error {
    return db.Insert(database, collection, blog)
}

controller 核心代码

blog := &models.BlogModel{
    Id:       bson.NewObjectId().Hex(),
    Title:    title,
    Original: origin,
    Content:  content,
    Date:     time.Now(),
}

blog.PostBlog(blog)

完整源码

测试效果图

编辑器

数据库
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,130评论 2 89
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,043评论 3 119
  • 这座海滨小城从来不缺花事。从春始,缤纷的樱花,俏丽的蔷薇,倾国的牡丹,旖旎的郁金香······我总是在匆匆如流的来...
    六月荷开阅读 3,437评论 3 5
  • 如果没有写作灵感 你该何去何从? 关于写作的话题,我自己也写了很多,譬如 《我为什么要写作?》 《写作的目的,是什...
    彭先生的杂货铺阅读 3,897评论 17 18
  • 掏出一枚小园镜, 岁月已然恍恍惚惚, 镜中人一丝丝地憔悴, 月儿浅弯须臾又见圆满, 而白发又怎复成青丝乌云? 我的...
    青璇小憩阅读 2,444评论 0 2