Golang 入门资料+笔记

手撸博客3 文章列表及文章

2020-10-28  本文已影响0人  FinaLone

1 设计思路

1.1 路由设计

/article路由到文章列表页面
/article/aid路由到具体的文章页面

1.2 数据库设计

1.3 页面设计

1.3.1 文章列表

使用列表展示文章列表。列表中显示文章标题,链接到具体文章。


文章列表

1.3.2 具体文章

显示文章的详情:标题、分类、时间、正文。
当前暂不实现文章的格式和富文本。


具体文章

2 文章列表实现细节

2.1 文章列表的html模板

{{ define "article_list.html"}}
<!DOCTYPE html>
<head>
    <title>Article List</title>
    <meta charset="utf8"/>
</head>
<body>
    <div class="article_list">
        {{ if len .}}
        <h2>Article List:</h2>
        <ul>
            {{ range . }}
            <li><a href="/article/{{.ID}}">{{.Title}}</a></li>
            {{ end }}
        </ul>
        {{ else }}
        <p>当前没有文章 :( </p>
        {{ end }}
    </div>
</body>
{{end}}

2.2 文章列表的路由和处理函数

engine.GET("/article_list", controller.ArticleListGet)
func ArticleListGet(c *gin.Context) {
    articles, err := service.ShowArticleList()
    if err != nil {
        fmt.Println("get articles from db err", err)
        c.String(http.StatusInternalServerError, err.Error())
    }

    c.HTML(http.StatusOK, "article_list.html", articles)
}

3 具体文章实现细节

3.1 具体文章的html模板

<!DOCTYPE html>
<head>
    <title>{{.Title}}</title>
    <meta charset="utf8"/>
</head>
<body>
    <h1>{{.Title}}</h1>
    <p>分类:{{.ClassID}}</p>
    <p>创建时间:{{.Ctime}}</p>
    <p>更新时间:{{.Mtime}}</p>
    <p>{{.Abstract.String}}</p>
    <p>{{.Main.String}}</p>
</body>

3.2 具体文章的路由和处理函数

和上面类似:

engine.GET("/article/:id", controller.ArticleGet)
func ArticleGet(c *gin.Context) {
    id, err := strconv.ParseUint(c.Param("id"), 10, 32)
    if err != nil {
        fmt.Println("parse id ", c.Param("id"), "err:", err.Error())
        c.String(http.StatusInternalServerError, err.Error())
    }

    article, err := service.ArticleGetHandler(id)
    if err != nil {
        fmt.Println("get article ", id, "err:", err.Error())
        c.String(http.StatusInternalServerError, err.Error())
        return
    }
    c.HTML(http.StatusOK, "article.html", article)
}

3 小结

本节实现了简单的文章列表展示和文章展示,主要实现流程和之前的留言板类似,学习了动态路由的用法。下一节实现写文章的功能。

上一篇下一篇

猜你喜欢

热点阅读