Go基础学习记录 - 编写Web应用程序 - 博客编辑功能完善

栏目: 数据库 · 发布时间: 7年前

内容简介:每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享一般我们在进行博客文章编辑的时候都要进行查询数据库,查找要编辑的文章是否存在,最后将查询出来的内容传到前端进行展示。修改models/blog.go文件的QueryOne函数,代码修改如下

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享

https://github.com/durban89/typescript_demo.git
tag: 1.1.0

一般我们在进行博客文章编辑的时候都要进行查询数据库,查找要编辑的文章是否存在,最后将查询出来的内容传到前端进行展示。

第一步 完善Model的查询逻辑

修改models/blog.go文件的QueryOne函数,代码修改如下

// QueryOne 获取一条数据
func (blog *Blog) QueryOne() (*helpers.Page, error) {
    var selectString = strings.Join(blog.Select, ", ")
    var whereString = strings.Join(blog.MergeWhere(), " AND ")

    sql := fmt.Sprintf("SELECT %s FROM %s WHERE %s LIMIT 0, 1", selectString, tableName, whereString)

    rows, err := Conn.Query(sql)

    if err != nil {
        return nil, err
    }

    var res = helpers.Page{}

    for rows.Next() {
        var autokid int
        var title string
        err = rows.Scan(&autokid, &title)

        if err != nil {
            return nil, err
        }

        p := helpers.Page{
            ID:    autokid,
            Title: title,
        }

        res = p
    }

    if res.ID == 0 {
        return nil, errors.New("文章不存在")
    }

    return &res, nil
}

从上面的方法中我们可以看出,使用了一个非常笨拙的方法,就是拼接SQL,然后执行 SQL 查询。

我们在看下Blog结构体是个什么样的设计

type Blog struct {
    Select []string
    Where  []db.Where
}

我当初的设计想法是,一个Model在进行查询操作的时候,唯一需要的用的到而且比较多的常用的也就只有select部分和where部分,其他复杂的部分这里暂时不做设计,后面会一步一步进行设计

再看下db.Where结构体的样子

type Where struct {
    Name     string
    Value    string
    Operator string
}

同时加了一个Merge方法,这个方法主要是用来进行将where条件的字段名和值进行拼接组成一个能在查询中使用的where条件字段值。

第二步 完善路由调动方法

完成这些,一个基本的查询就完成了,下面看下如何来调用这个操作,使得我们的博客能够跟数据库打通,后面的编辑提交跟添加之类的操作就比较方便了。看下ArticleEdit函数的修改如下

// ArticleEdit 编辑文章
func ArticleEdit(w http.ResponseWriter, r *http.Request) {
    id := r.URL.Query().Get("id")
    if id == "" {
        http.NotFound(w, r)
        return
    }

    where := []db.Where{}

    where = append(where, db.Where{
        Name:  "autokid",
        Value: id,
    })

    blogModel := &models.Blog{
        Select: []string{"*"},
        Where:  where,
    }

    p, err := blogModel.QueryOne()

    if err != nil {
        http.NotFound(w, r)
        return
    }

    crutime := time.Now().Unix()
    h := md5.New()
    io.WriteString(h, strconv.FormatInt(crutime, 10))
    token := fmt.Sprintf("%x", h.Sum(nil))

    p.Token = token
    helpers.RenderTemplate(w, "edit", p)
}

首先是根据传进来的参数id,查询数据库blog表,如果文章存在则进行渲染模板,如果不存在则渲染不存在的页面。

第三步 重新编译并运行

项目目录下执行并运行

go install && wiki

想要看完成实例,请到这里,如下

项目更新地址

https://github.com/durban89/typescript_demo.git
tag: 1.1.0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

长尾理论

长尾理论

[美]克里斯·安德森 / 中信出版集团股份有限公司 / 2015-8-1 / 59.00元

互联网时代,大众市场不再一统天下,小众市场也可以呼风唤雨。 在《长尾理论》一书中,克里斯·安德森详细阐释了长尾的精华所在,指出商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”的头部,而是那条代表“冷门商品”的经常被人遗忘的长尾。尽管我们仍然对热门商品着迷,但它们对消费者的吸引力已经大不如从前,因为市场已经大大分化。黄金电视节目的收视率几十年来一直在萎缩,若是在七八十年代,现在的一档最......一起来看看 《长尾理论》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具