本章节学习下beego的文章添加、编辑、删除以及展示功能。
controllers文件夹下添加topic.go文件,源码:
package controllers
import (
"github.com/astaxie/beego"
"myapp/models"
)
type TopicController struct {
beego.Controller
}
func (this *TopicController) Get() {
this.Data["isActive"] = "topic"
this.TplName = "topic.html"
this.Data["IsLogin"] = checkAccount(this.Ctx)
topics, err := models.GetAllTopics(false)
if err != nil {
beego.Error(err)
}
this.Data["Topics"] = topics
}
func (this *TopicController) Post() {
if !checkAccount(this.Ctx) {
this.Redirect("/login", 302)
return
}
// 解析表单
tid := this.Input().Get("tid")
title := this.Input().Get("title")
content := this.Input().Get("content")
var err error
if len(tid) == 0 {
err = models.AddTopic(title, content)
} else {
err = models.ModifyTopic(tid, title, content)
}
if err != nil {
beego.Error(err)
}
this.Redirect("/topic", 302)
}
func (this *TopicController) Add() {
if !checkAccount(this.Ctx) {
this.Redirect("/login", 302)
return
}
this.Data["isActive"] = ""
this.TplName = "topic_add.html"
}
func (this *TopicController) Delete() {
if !checkAccount(this.Ctx) {
this.Redirect("/login", 302)
return
}
err := models.DeleteTopic(this.Input().Get("tid"))
if err != nil {
beego.Error(err)
}
this.Redirect("/topic", 302)
}
func (this *TopicController) Modify() {
this.TplName = "topic_modify.html"
this.Data["isActive"] = ""
tid := this.Input().Get("tid")
topic, err := models.GetTopic(tid)
if err != nil {
beego.Error(err)
this.Redirect("/", 302)
return
}
this.Data["Topic"] = topic
this.Data["Tid"] = tid
}
func (this *TopicController) View() {
this.TplName = "topic_view.html"
this.Data["isActive"] = ""
topic, err := models.GetTopic(this.Ctx.Input.Params()["0"])
if err != nil {
beego.Error(err)
this.Redirect("/", 302)
return
}
this.Data["Topic"] = topic
}
models文件夹下models.go添加:
func AddTopic(title, content string) error {
o := orm.NewOrm()
topic := &Topic{
Title: title,
Content: content,
Created: time.Now(),
Updated: time.Now(),
ReplyTime: time.Now(),
}
_, err := o.Insert(topic)
return err
}
func GetTopic(tid string) (*Topic, error) {
tidNum, err := strconv.ParseInt(tid, 10, 64)
if err != nil {
return nil, err
}
o := orm.NewOrm()
topic := new(Topic)
qs := o.QueryTable("topic")
err = qs.Filter("id", tidNum).One(topic)
if err != nil {
return nil, err
}
topic.Views++
_, err = o.Update(topic)
return topic, nil
}
func ModifyTopic(tid, title, content string) error {
tidNum, err := strconv.ParseInt(tid, 10, 64)
if err != nil {
return err
}
o := orm.NewOrm()
topic := &Topic{Id: tidNum}
if o.Read(topic) == nil {
topic.Title = title
topic.Content = content
topic.Updated = time.Now()
o.Update(topic)
}
return nil
}
func DeleteTopic(tid string) error {
tidNum, err := strconv.ParseInt(tid, 10, 64)
if err != nil {
return err
}
o := orm.NewOrm()
topic := &Topic{Id: tidNum}
_, err = o.Delete(topic)
return err
}
func GetAllTopics(isDesc bool) (topics []*Topic, err error) {
o := orm.NewOrm()
topics = make([]*Topic, 0)
qs := o.QueryTable("topic")
if isDesc {
_, err = qs.OrderBy("-created").All(&topics)
} else {
_, err = qs.All(&topics)
}
return topics, err
}
其他文件修改:
home.go添加文章的展示,和文章列表很类似的修改
route.go 添加:
beego.Router("/topic", &controllers.TopicController{})
beego.AutoRouter(&controllers.TopicController{})
views文件夹下添加topic的各种模板
最后运行,bee run myapp。出来如下图:

github:https://github.com/yangsir/beego_study
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/98493.html