å°Â项ç®ä»Âç»Â
ç»Âè¿Â对éÂÂæ±ÂçÂÂÃ¥ÂÂæÂÂï¼ÂæÂÂå¢Âå äºÂä¸ÂäºÂé¢Âå¤ÂçÂÂä¸Â西ï¼Âæ¯Âå¦Âå¢Âå äºÂuser
ç¨æ·ï¼Âå 为æÂÂèÂÂèÂÂå°å¸ÂÃ¥ÂÂæÂÂèÂÂ
æ¯è¯Â论ï¼Âè·ÂÃ¥ÂÂå¸Âå·®ä¸Âå¤Âï¼Âé½ä¼ÂæÂÂä½ÂèÂÂ
ï¼Â主è¦ÂçÂÂÃ¥ÂÂè½æÂÂå¢Âå å¸ÂÃ¥ÂÂãÂÂæÂ¥çÂÂæÂÂæÂÂæÂÂÃ¥ÂÂ个å¸ÂÃ¥ÂÂãÂÂå¢Âå è¯Â论ãÂÂæÂ¥çÂÂæÂÂ个å¸ÂÃ¥ÂÂçÂÂæÂÂæÂÂè¯Â论æÂÂÃ¥ÂÂ个è¯Â论ãÂÂæ°æ®æÂÂæ¯å°Âå®ÂÃ¥ÂÂå¨æ°æ®åºÂä¸Âï¼ÂèÂÂä¸Âæ¯åÂÂ
Ã¥ÂÂä¸ÂãÂÂ
é¦ÂÃ¥Â
Âç»Â端è¿Âè¡Âbee api apiname
æ°建ä¸Â个beego项ç®ï¼Âapi
å½令å¯以让æÂÂ们å¾Âæ¹便å°å®Âç°APIåºÂç¨ãÂÂ
å¨IDEæÂÂå¼ÂçÂÂæÂÂçÂÂ项ç®ï¼Â并éÂ
Âç½®app.conf
ä¸ÂÃ¥Â
³äºÂæ°æ®åºÂçÂÂé¨åÂÂãÂÂ
æ°æ®åºÂæÂÂéÂÂç¨MySQL
ï¼Âapp.conf
æÂÂ件å¦Âä¸Âï¼Â
appname = post
httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
username = root
password =
host = 127.0.0.1
port = 3306
database = post
æ°æ®åºÂå½åÂÂ为post
ï¼Âå æ¤æÂÂÃ¥Â
匬Navicat
软件ä¸ÂÃ¥ÂÂ建该æ°æ®åºÂï¼Âç¼Âç Âè§ÂÃ¥ÂÂ为utf8mb4
ï¼Â以æ¹便åÂÂç»ÂæÂÂä½ÂãÂÂ
æÂÂÃ¥ÂÂçÂÂ项ç®ç»ÂæÂÂå¦Âä¸Âï¼Â
conf
æÂÂ件夹åÂÂ
å«项ç®éÂ
Âç½®æÂÂ件ï¼Âcontrollers
æÂÂ件夹è´Âè´£å¤ÂçÂÂä¸Âå¡é»è¾Âï¼Âmodels
æÂÂ件夹ä¸Âæ°æ®åºÂ模åÂÂç¸åÂ
³ï¼Ârouters
æÂÂ件夹åÂÂ
å«项ç®çÂÂæÂÂæÂÂè·¯ç±ï¼Âtests
æÂÂ件夹å«æÂÂæµÂè¯ÂæÂÂ件ï¼ÂèÂÂå¨æ¬ç¯ÂæÂÂç« æÂÂæÂÂç®Â使ç¨postman
æÂ¥è¿Âè¡ÂæÂ¥å£æµÂè¯ÂãÂÂ
æºÂç ÂÃ¥ÂÂæÂÂ
æÂ¥ä¸Âæ¥对æ¯Â个æÂÂ件è¿Âè¡ÂæºÂç Âå±Â示ä¸ÂÃ¥ÂÂæÂÂãÂÂ
main.go
package main
import (
"fmt"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/server/web"
_ "github.com/go-sql-driver/mysql"
"github.com/prometheus/common/log"
_ "post/models"
_ "post/routers"
)
func init() {
username, _ := web.AppConfig.String("username")
password, _ := web.AppConfig.String("password")
host, _ := web.AppConfig.String("host")
port, _ := web.AppConfig.String("port")
database, _ := web.AppConfig.String("database")
datasource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&loc=Local", username, password, host, port, database)
err := orm.RegisterDataBase("default", "mysql", datasource)
if err != nil {
log.Fatal(err)
}
err = orm.RunSyncdb("default", false, true)
if err != nil {
log.Fatal(err)
}
}
func main() {
orm.RunCommand()
web.Run()
}
- 导堥å @代ç Âå¼Âå§Âæ¶导堥äºÂä¸ÂäºÂå¿ è¦ÂçÂÂå ï¼Â
- “fmt” ç¨äºÂæ ¼å¼ÂÃ¥ÂÂçÂÂè¾Âå ¥è¾ÂåºãÂÂ
- “github.com/beego/beego/v2/client/orm” æ¯ Beego ORM å ãÂÂ
- “github.com/beego/beego/v2/server/web” æ¯ Beego Web æÂÂå¡å¨å ãÂÂ
- “github.com/go-sql-driver/mysql” æ¯ MySQL æ°æ®åºÂ驱å¨ãÂÂ
- “github.com/prometheus/common/log” ç¨äºÂæÂ¥å¿Âè®°å½ÂãÂÂ
- “post/models” å “post/routers” ç¨äºÂ导堥模åÂÂÃ¥ÂÂè·¯ç±é Âç½®ã ï¼Âè¿ÂäºÂä» ç¨äºÂå¯ä½Âç¨ï¼Âå 为å®Â们å¯è½å¨åÂÂå§ÂÃ¥ÂÂè¿Âç¨Âä¸Â注åÂÂ模åÂÂÃ¥ÂÂè·¯ç±ãÂÂï¼Â
init()
å½æ°ï¼Âinit()
å½æ°å¨ç¨ÂåºÂå¯å¨æ¶èªå¨è°Âç¨ãÂÂå¨è¿Â个å½æ°ä¸Âï¼Â代ç Â使ç¨Beego
é Â置读åÂÂäºÂMySQL
æ°æ®åºÂçÂÂÃ¥ÂÂæ®ï¼Âç¨æ·åÂÂãÂÂå¯Âç ÂãÂÂ主æºãÂÂ端å£åÂÂæ°æ®åºÂÃ¥ÂÂï¼Âï¼Â并æÂÂ建äºÂè¿ÂæÂ¥æ°æ®åºÂçÂÂæ°æ®æºÂÃ¥ÂÂ符串ãÂÂdatasource
Ã¥ÂÂéÂÂå å«è¿ÂæÂ¥åÂÂ符串ãÂÂ
ç¶åÂÂï¼Â代ç Â使ç¨ orm.RegisterDataBase()
å½æ°尠MySQL æ°æ®åºÂ注åÂÂå° Beego ORM ä¸ÂãÂÂæ¤å½æ°çÂÂÃ¥ÂÂæ°为ï¼Â
- “default”ï¼Âè¿Âæ¯æ°æ®åºÂè¿ÂæÂ¥çÂÂå«åÂÂï¼Âå¨åºÂç¨çÂÂå ¶ä»Âé¨åÂÂä¸Âä¼Â以 “default” ä½Â为å¼Âç¨ãÂÂ
- “mysql”ï¼ÂMySQL æ°æ®åºÂçÂÂ驱å¨åÂÂ称ãÂÂ
datasource
ï¼Âä¹ÂÃ¥ÂÂæÂÂ建çÂÂæ°æ®æºÂÃ¥ÂÂ符串ãÂÂ
æÂ¥ä¸ÂæÂ¥ï¼Âè°Âç¨ orm.RunSyncdb()
å½æ°ï¼Âæ ¹æ® post/models
Ã¥ÂÂ
ä¸ÂçÂÂ模åÂÂå®Âä¹ÂæÂ¥åÂÂ建æ°æ®åºÂ表ãÂÂæ¤å½æ°çÂÂÃ¥ÂÂæ°为ï¼Â
- “default”ï¼Âç¨äºÂÃ¥ÂÂ建表çÂÂæ°æ®åºÂè¿ÂæÂ¥å«åÂÂãÂÂ
false
ï¼Âæ¤åÂÂæ°æÂÂ示æ¯å¦å¨åÂÂ建æ°表ä¹ÂÃ¥ÂÂå é¤ç°æÂÂ表ãÂÂå¨è¿ÂéÂÂ设置为false
ï¼Â表示ä¸Âä¼Âå é¤ç°æÂÂ表ãÂÂtrue
ï¼Âæ¤åÂÂæ°æÂÂ示æ¯å¦å¨表ä¸ÂÃ¥ÂÂå¨æ¶åÂÂ建表ãÂÂ设置为true
ï¼ÂæÂÂ以ä¼Âå¨表ä¸ÂÃ¥ÂÂå¨æ¶åÂÂ建å®Â们ãÂÂ
- main() å½æ°ï¼Â
main()
å½æ°æ¯ç¨ÂåºÂçÂÂå ¥å£ç¹ãÂÂå®Âè°Âç¨äºÂ两个å½æ°ï¼Â
orm.RunCommand()
ï¼Âæ¤å½æ°解æÂÂ丠ORM ç¸堳çÂÂå½令è¡ÂÃ¥ÂÂæ°ï¼Â并æ§è¡Âç¸åºÂçÂÂæÂÂä½ÂãÂÂä¾Âå¦Âï¼Âå®Âå¯以根æ® ORM é Âç½®çÂÂæÂÂ模åÂÂæÂÂ件ãÂÂæ§å¶å¨æÂÂæ°æ®åºÂè¿Â移èÂÂæ‹ÂÂweb.Run()
ï¼Âæ¤å½æ°å¯å¨ Beego Web æÂÂå¡å¨ï¼Â并å¤ÂçÂÂä¼ å ¥ç HTTP 请æ±ÂãÂÂ
该åºÂç¨ç¨ÂåºÂä¼ÂçÂÂå¬传堥ç HTTP 请æ±Âï¼Âé»Â认端å£为 8080ï¼Âå°Â堶路ç±å°éÂÂå½ÂçÂÂæ§å¶å¨å¨ä½Âï¼Âè¿ÂäºÂå¨ä½Âå¨路ç±é Âç½®ä¸Âå®Âä¹ÂãÂÂ
router.go
package routers
import (
"github.com/beego/beego/v2/server/web"
"post/controllers"
)
func init() {
web.Router("/post", &controllers.PostController{}, "get:PostList;post:PostAdd")
web.Router("/comment", &controllers.CommentController{}, "get:CommentList;post:CommentAdd")
}
è¿Â段代ç Âå®Âä¹Â亠Beego æ¡Âæ¶ä¸ÂçÂÂè·¯ç±é Âç½®ãÂÂè·¯ç±é Âç½®ç¨äºÂå°Âä¸ÂÃ¥ÂÂç URL è·¯å¾Âæ å°Âå°ç¸åºÂçÂÂæ§å¶å¨åÂÂå¤ÂçÂÂå½æ°ä¸ÂãÂÂ
让æÂÂ们æ¥解éÂÂä¸Âä¸Âè¿Â段代ç Âï¼Â
- 导堥å @代ç Âä¸Â导堥äºÂ两个å ï¼Â
- “github.com/beego/beego/v2/server/web”ï¼Âè¿Âæ¯ Beego æ¡Âæ¶ç Web æÂÂå¡å¨å ï¼Âç¨äºÂ设置路ç±åÂÂå¤Âç HTTP 请æ±ÂãÂÂ
- “post/controllers”ï¼Âè¿Âæ¯èªå®Âä¹ÂçÂÂæ§å¶å¨å ï¼Âç¨äºÂå¤ÂçÂÂä¸ÂÃ¥ÂÂçÂÂ请æ±ÂãÂÂ
- init() å½æ°ï¼Â
init()
å½æ°å¨该å 被导堥æ¶èªå¨è°Âç¨ãÂÂå¨æ¤å½æ°ä¸Âï¼ÂæÂÂ们å®Âä¹ÂäºÂ两个路ç±è§ÂÃ¥ÂÂï¼Â
-
第ä¸Â个路ç±è§ÂÃ¥ÂÂï¼Â
web.Router("/post", &controllers.PostController{}, "get:PostList;post:PostAdd")
web.Router("/post"
ï¼Âè¿Â表示å°Â路徠“/post” æ å°Âå°åÂÂé¢çÂÂæ§å¶å¨åÂÂå¤ÂçÂÂå½æ°ä¸ÂãÂÂ&controllers.PostController{}
ï¼Âè¿Âæ¯PostController
çÂÂå®Âä¾Âï¼Âç¨äºÂå¤ÂçÂÂ丠“/post” è·¯å¾Âç¸堳çÂÂ请æ±ÂãÂÂ"get:PostList;post:PostAdd"
ï¼Âè¿Âæ¯路ç±è§ÂÃ¥ÂÂÃ¥ÂÂ符串ï¼Âå®ÂæÂÂå®ÂäºÂ请æ±Âæ¹æ³ÂÃ¥ÂÂ对åºÂçÂÂå¤ÂçÂÂå½æ°ãÂÂå¨è¿ÂéÂÂ4get:PostList” 表示尠GET 请æ±Âæ å°Âå°PostController
çÂÂPostList
æ¹æ³Âä¸Â4post:PostAdd” 表示尠POST 请æ±Âæ å°Âå°PostController
çÂÂPostAdd
æ¹æ³Âä¸ÂãÂÂ
-
第äºÂ个路ç±è§ÂÃ¥ÂÂï¼Â
web.Router("/comment", &controllers.CommentController{}, "get:CommentList;post:CommentAdd")
web.Router("/comment"
ï¼Âè¿Â表示å°Â路徠“/comment” æ å°Âå°åÂÂé¢çÂÂæ§å¶å¨åÂÂå¤ÂçÂÂå½æ°ä¸ÂãÂÂ&controllers.CommentController{}
ï¼Âè¿Âæ¯CommentController
çÂÂå®Âä¾Âï¼Âç¨äºÂå¤ÂçÂÂ丠“/comment” è·¯å¾Âç¸堳çÂÂ请æ±ÂãÂÂ"get:CommentList;post:CommentAdd"
ï¼Âè¿Âæ¯路ç±è§ÂÃ¥ÂÂÃ¥ÂÂ符串ï¼ÂæÂÂå®ÂäºÂ请æ±Âæ¹æ³ÂÃ¥ÂÂ对åºÂçÂÂå¤ÂçÂÂå½æ°ã”get:CommentList” 表示尠GET 请æ±Âæ å°Âå°CommentController
çÂÂCommentList
æ¹æ³Âä¸Â4post:CommentAdd” 表示尠POST 请æ±Âæ å°Âå°CommentController
çÂÂCommentAdd
æ¹æ³Âä¸ÂãÂÂ
models/user.go
package models
import (
"github.com/beego/beego/v2/client/orm"
"time"
)
type User struct {
Id int `orm:"pk;auto"`
Name string `orm:"description(ç¨æ·åÂÂ)"`
Posts []*Post `orm:"reverse(many)"`
Comments []*Comment `orm:"reverse(many)"`
CreateTime time.Time `orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"`
}
func init() {
// éÂÂè¦Âå¨initä¸Â注åÂÂå®Âä¹ÂçÂÂmodel
orm.RegisterModel(new(User), new(Post), new(Comment))
}
è¿Â段代ç Âå®Âä¹ÂäºÂä¸Â个æ°æ®模åÂÂï¼ÂUserãÂÂPostãÂÂÃ¥ÂÂCommentï¼Â并使ç¨ Beego ORM å è¿Âè¡ÂäºÂ注åÂÂãÂÂ
让æÂÂ们éÂÂæ¥解éÂÂè¿Â段代ç Âï¼Â
- 导堥å @代ç Âä¸Â导堥äºÂ两个å ï¼Â
- “github.com/beego/beego/v2/client/orm”ï¼Âè¿Âæ¯ Beego ORM å ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½ÂÃ¥ÂÂ对象堳系æ å°ÂãÂÂ
- “time”ï¼Âè¿Âæ¯ Go æ ÂÃ¥ÂÂåºÂä¸ÂçÂÂæ¶é´å ï¼Âç¨äºÂå¤ÂçÂÂæ¶é´ç¸堳çÂÂæÂÂä½ÂãÂÂ
- User ç»ÂæÂÂä½Âï¼ å®Âä¹ÂäºÂÃ¥ÂÂ为 User çÂÂç»ÂæÂÂä½Âï¼Â表示æ°æ®åºÂä¸ÂçÂÂç¨æ·表ãÂÂ
Id int orm:"pk;auto"
ï¼ÂId Ã¥ÂÂ段æ¯主é®4pk” 表示主é®4auto” 表示èªå¢ÂãÂÂName string orm:"description(ç¨æ·åÂÂ)"
ï¼ÂName Ã¥ÂÂ段æ¯ç¨æ·åÂÂÃ¥ÂÂ段4description(ç¨æ·åÂÂ)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂPosts []*Post orm:"reverse(many)"
ï¼ÂPosts æ¯ç¨æ·ä¸Âå¸ÂÃ¥ÂÂä¹Âé´çÂÂä¸Â对å¤ÂÃ¥ÂÂÃ¥ÂÂ堳系ï¼Â表示ä¸Â个ç¨æ·å¯以æÂÂå¤Â个å¸ÂÃ¥ÂÂãÂÂComments []*Comment orm:"reverse(many)"
ï¼ÂComments æ¯ç¨æ·ä¸Âè¯Â论ä¹Âé´çÂÂä¸Â对å¤ÂÃ¥ÂÂÃ¥ÂÂ堳系ï¼Â表示ä¸Â个ç¨æ·å¯以æÂÂå¤Â个è¯Â论ãÂÂCreateTime time.Time orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"
ï¼ÂCreateTime Ã¥ÂÂ段æ¯åÂÂ建æ¶é´åÂÂ段4auto_now_add” 表示å¨åÂÂ建æ°记å½Âæ¶èªå¨设置为å½ÂÃ¥ÂÂæ¶é´4type(datetime)” 表示åÂÂ段类åÂÂ为 datetime4description(Ã¥ÂÂ建æ¶é´)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂ
- init() å½æ°ï¼Â
init()
å½æ°å¨å 被导堥æ¶èªå¨è°Âç¨ãÂÂå¨è¿ÂéÂÂï¼Â代ç Âè°Âç¨orm.RegisterModel()
å½æ°æ¥注åÂÂå®Âä¹ÂçÂÂ模åÂÂï¼Â以便å¨åºÂç¨ç¨ÂåºÂè¿Âè¡Âæ¶ä¸Âæ°æ®åºÂ表è¿Âè¡Âæ å°ÂãÂÂ
orm.RegisterModel(new(User), new(Post), new(Comment))
ï¼Â注å UserãÂÂPostãÂÂå Comment ä¸Â个模åÂÂï¼Âè¿Âæ · Beego ORM å°±çÂ¥éÂÂå®Â们çÂÂç»ÂæÂÂÃ¥ÂÂä¸Âæ°æ®åºÂ表ä¹Âé´çÂÂæ å°Â堳系ãÂÂ
models/Post.go
package models
import "time"
type Post struct {
Id int `orm:"pk;auto"`
Title string `orm:"description(å¸ÂÃ¥ÂÂæ Âé¢Â)"`
Content string `orm:"size(4000);description(å¸ÂÃ¥ÂÂÃ¥ÂÂ
容)"`
ReadNum int `orm:"description(éÂÂ
读éÂÂ);default(0)"`
Author *User `orm:"rel(fk);description(ä½ÂèÂÂ
)"`
Comments []*Comment `orm:"reverse(many);description(è¯Â论)"`
CreateTime time.Time `orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"`
}
func PostData(posts []Post) (data []interface{}) {
for _, post := range posts {
data = append(data, map[string]interface{}{
"id": post.Id,
"title": post.Title,
"author": post.Author.Name,
"content": post.Content,
"read_num": post.ReadNum,
"create_time": post.CreateTime.Format("2006-1-2 15:04"),
})
}
return
}
è¿Â段代ç Âå®Âä¹ÂäºÂä¸Â个åÂÂ为 Post
çÂÂæ°æ®模åÂÂï¼Â并æÂÂä¾ÂäºÂä¸Â个å½æ° PostData
ï¼Âç¨äºÂå° Post
ç»ÂæÂÂä½ÂçÂÂæ°æ®转æ¢为ç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ãÂÂ
让æÂÂ们æÂ¥éÂÂæ¥解éÂÂè¿Â段代ç Âï¼Â
Post
ç»ÂæÂÂä½Âï¼ÂPost
æ¯ä¸Â个æ°æ®模åÂÂï¼Â表示æ°æ®åºÂä¸ÂçÂÂå¸ÂÃ¥ÂÂ表ãÂÂ
Id int orm:"pk;auto"
ï¼ÂId
Ã¥ÂÂ段æ¯主é®4pk” 表示主é®4auto” 表示èªå¢Âé¿ãÂÂTitle string orm:"description(å¸ÂÃ¥ÂÂæ Âé¢Â)"
ï¼ÂTitle
Ã¥ÂÂ段æ¯å¸ÂÃ¥ÂÂæ Âé¢ÂÃ¥ÂÂ段4description(å¸ÂÃ¥ÂÂæ Âé¢Â)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂContent string orm:"size(4000);description(å¸ÂÃ¥ÂÂå 容)"
ï¼ÂContent
Ã¥ÂÂ段æ¯å¸ÂÃ¥ÂÂå 容åÂÂ段4size(4000)” 表示åÂÂ段æÂÂ大é¿度为 40004description(å¸ÂÃ¥ÂÂå 容)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂReadNum int orm:"description(é 读éÂÂ);default(0)"
ï¼ÂReadNum
Ã¥ÂÂ段æ¯é 读éÂÂÃ¥ÂÂ段4description(é 读éÂÂ)” æ¯对åÂÂ段çÂÂæÂÂ述4default(0)” 表示é»Â认å¼为 0ãÂÂAuthor *User orm:"rel(fk);description(ä½Âè )"
ï¼ÂAuthor
Ã¥ÂÂ段æ¯ä¸Â个æÂÂÃ¥ÂÂUser
ç»ÂæÂÂä½ÂçÂÂå¤Âé®堳èÂÂÃ¥ÂÂ段ï¼Â表示è¿Âç¯Âå¸ÂÃ¥ÂÂçÂÂä½Âè ãÂÂComments []*Comment orm:"reverse(many);description(è¯Â论)"
ï¼ÂComments
Ã¥ÂÂ段æ¯ä¸Â个æÂÂÃ¥ÂÂComment
ç»ÂæÂÂä½ÂçÂÂä¸Â对å¤ÂÃ¥ÂÂÃ¥ÂÂå ³èÂÂÃ¥ÂÂ段ï¼Â表示è¿Âç¯Âå¸ÂÃ¥ÂÂå¯以æÂÂå¤Âæ¡è¯Â论ãÂÂCreateTime time.Time orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"
ï¼ÂCreateTime
Ã¥ÂÂ段æ¯åÂÂ建æ¶é´åÂÂ段4auto_now_add” 表示å¨åÂÂ建æ°记å½Âæ¶èªå¨设置为å½ÂÃ¥ÂÂæ¶é´4type(datetime)” 表示åÂÂ段类åÂÂ为 datetime4description(Ã¥ÂÂ建æ¶é´)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂ
PostData
å½æ°ï¼ÂPostData
å½æ°æÂ¥æ¶ä¸Â个[]Post
Ã¥ÂÂçÂÂï¼Â该åÂÂçÂÂå å«å¤Â个Post
ç»ÂæÂÂä½ÂãÂÂå½æ°çÂÂç®çÂÂæ¯å°Âè¿ÂäºÂç»ÂæÂÂä½ÂçÂÂæ°æ®转æ¢为ä¸Â个ç¹å®Âæ ¼å¼ÂçÂÂÃ¥ÂÂçÂÂ[]interface{}
ãÂÂ
å¨å½æ°ä¸Âï¼ÂéÂÂè¿ÂéÂÂå posts
Ã¥ÂÂçÂÂï¼Âå°Âæ¯Â个 Post
ç»ÂæÂÂä½ÂçÂÂÃ¥ÂÂ段å¼åÂÂå¨å¨ä¸Â个 map[string]interface{}
ä¸Âï¼Âç¶åÂÂå°Â该 map
æ·»å å° data
Ã¥ÂÂçÂÂä¸ÂãÂÂ
å ·ä½Â转æ¢çÂÂÃ¥ÂÂ段å¦Âä¸Âï¼Â
- “id”: å¸ÂÃ¥ÂÂçÂÂ
Id
Ã¥ÂÂ段ã - “title”: å¸ÂÃ¥ÂÂçÂÂ
Title
Ã¥ÂÂ段ã - “author”: å¸ÂÃ¥ÂÂçÂÂä½ÂèÂÂ
çÂÂå§ÂÃ¥ÂÂï¼ÂéÂÂè¿Â访é®
post.Author.Name
è·åÂÂã - “content”: å¸ÂÃ¥ÂÂçÂÂ
Content
Ã¥ÂÂ段ã - “read_num”: å¸ÂÃ¥ÂÂçÂÂ
ReadNum
Ã¥ÂÂ段ã - “create_time”: å¸ÂÃ¥ÂÂçÂÂ
CreateTime
Ã¥ÂÂ段ï¼Âæ ¼å¼ÂÃ¥ÂÂ为形å¼Â类似 “2006-1-2 15:04” çÂÂÃ¥ÂÂ符串ãÂÂ
æÂÂÃ¥ÂÂï¼Âå½æ°è¿ÂÃ¥ÂÂ转æ¢åÂÂç data
Ã¥ÂÂçÂÂãÂÂ
models/comment.go
package models
import "time"
type Comment struct {
Id int `orm:"pk;auto"`
Content string `orm:"size(4000);description(è¯Â论åÂÂ
容)"`
Post *Post `orm:"rel(fk);description(å¸ÂÃ¥ÂÂå¤Âé®)"`
Author *User `orm:"rel(fk);description(è¯Â论人)"`
CreateTime time.Time `orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"`
}
func CommentData(comments []Comment) (data []interface{}) {
for _, comment := range comments {
data = append(data, map[string]interface{}{
"id": comment.Id,
"author": comment.Author.Name,
"content": comment.Content,
"create_time": comment.CreateTime.Format("2006-1-2 15:04"),
})
}
return
}
è¿Â段代ç Âå®Âä¹ÂäºÂä¸Â个åÂÂ为 Comment
çÂÂæ°æ®模åÂÂï¼Â并æÂÂä¾ÂäºÂä¸Â个å½æ° CommentData
ï¼Âç¨äºÂå° Comment
ç»ÂæÂÂä½ÂçÂÂæ°æ®转æ¢为ç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ãÂÂ
让æÂÂ们éÂÂæ¥解éÂÂè¿Â段代ç Âï¼Â
Comment
ç»ÂæÂÂä½Âï¼ÂComment
æ¯ä¸Â个æ°æ®模åÂÂï¼Â表示æ°æ®åºÂä¸ÂçÂÂè¯Â论表ãÂÂ
Id int orm:"pk;auto"
ï¼ÂId
Ã¥ÂÂ段æ¯主é®4pk” 表示主é®4auto” 表示èªå¢Âé¿ãÂÂContent string orm:"size(4000);description(è¯Â论å 容)"
ï¼ÂContent
Ã¥ÂÂ段æ¯è¯Â论å 容åÂÂ段4size(4000)” 表示åÂÂ段æÂÂ大é¿度为 40004description(è¯Â论å 容)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂPost *Post orm:"rel(fk);description(å¸ÂÃ¥ÂÂå¤Âé®)"
ï¼ÂPost
Ã¥ÂÂ段æ¯ä¸Â个æÂÂÃ¥ÂÂPost
ç»ÂæÂÂä½ÂçÂÂå¤Âé®堳èÂÂÃ¥ÂÂ段ï¼Â表示该è¯Â论æÂÂå±ÂçÂÂå¸ÂÃ¥ÂÂãÂÂAuthor *User orm:"rel(fk);description(è¯Â论人)"
ï¼ÂAuthor
Ã¥ÂÂ段æ¯ä¸Â个æÂÂÃ¥ÂÂUser
ç»ÂæÂÂä½ÂçÂÂå¤Âé®堳èÂÂÃ¥ÂÂ段ï¼Â表示该è¯Â论çÂÂä½Âè ãÂÂCreateTime time.Time orm:"auto_now_add;type(datetime);description(Ã¥ÂÂ建æ¶é´)"
ï¼ÂCreateTime
Ã¥ÂÂ段æ¯åÂÂ建æ¶é´åÂÂ段4auto_now_add” 表示å¨åÂÂ建æ°记å½Âæ¶èªå¨设置为å½ÂÃ¥ÂÂæ¶é´4type(datetime)” 表示åÂÂ段类åÂÂ为 datetime4description(Ã¥ÂÂ建æ¶é´)” æ¯对åÂÂ段çÂÂæÂÂè¿°ãÂÂ
CommentData
å½æ°ï¼ÂCommentData
å½æ°æÂ¥æ¶ä¸Â个[]Comment
Ã¥ÂÂçÂÂï¼Â该åÂÂçÂÂå å«å¤Â个Comment
ç»ÂæÂÂä½ÂãÂÂå½æ°çÂÂç®çÂÂæ¯å°Âè¿ÂäºÂç»ÂæÂÂä½ÂçÂÂæ°æ®转æ¢为ä¸Â个ç¹å®Âæ ¼å¼ÂçÂÂÃ¥ÂÂçÂÂ[]interface{}
ãÂÂ
å¨å½æ°ä¸Âï¼ÂéÂÂè¿ÂéÂÂå comments
Ã¥ÂÂçÂÂï¼Âå°Âæ¯Â个 Comment
ç»ÂæÂÂä½ÂçÂÂÃ¥ÂÂ段å¼åÂÂå¨å¨ä¸Â个 map[string]interface{}
ä¸Âï¼Âç¶åÂÂå°Â该 map
æ·»å å° data
Ã¥ÂÂçÂÂä¸ÂãÂÂ
å ·ä½Â转æ¢çÂÂÃ¥ÂÂ段å¦Âä¸Âï¼Â
- “id”: è¯Â论çÂÂ
Id
Ã¥ÂÂ段ã - “author”: è¯Â论çÂÂä½ÂèÂÂ
çÂÂå§ÂÃ¥ÂÂï¼ÂéÂÂè¿Â访é®
comment.Author.Name
è·åÂÂã - “content”: è¯Â论çÂÂ
Content
Ã¥ÂÂ段ã - “create_time”: è¯Â论çÂÂ
CreateTime
Ã¥ÂÂ段ï¼Âæ ¼å¼ÂÃ¥ÂÂå½¢å¼Â类似为 “2006-1-2 15:04” çÂÂÃ¥ÂÂ符串ãÂÂ
æÂÂÃ¥ÂÂï¼Âå½æ°è¿ÂÃ¥ÂÂ转æ¢åÂÂç data
Ã¥ÂÂçÂÂãÂÂ
controllers/post.go
package controllers
import (
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/server/web"
"post/models"
)
type PostController struct {
web.Controller
}
func (c *PostController) PostList() {
o := orm.NewOrm()
postId, _ := c.GetInt("post_id", 0)
if postId == 0 {
var posts []models.Post
if _, err := o.QueryTable(new(models.Post)).RelatedSel().All(&posts); err == nil {
c.Data["json"] = map[string]interface{}{"code": 200, "count": len(posts), "data": models.PostData(posts)}
c.ServeJSON()
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "è·åÂÂå¸ÂÃ¥ÂÂÃ¥ÂÂ表失败"}
c.ServeJSON()
}
} else {
var post models.Post
qs := o.QueryTable(new(models.Post)).Filter("id", postId)
if err := qs.RelatedSel().One(&post); err == nil {
// éÂÂ
读æ°+1
qs.Update(orm.Params{"read_num": post.ReadNum + 1})
c.Data["json"] = map[string]interface{}{"code": 200, "data": models.PostData([]models.Post{post})}
c.ServeJSON()
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "è·åÂÂå¸ÂÃ¥ÂÂ失败"}
c.ServeJSON()
}
}
}
func (c *PostController) PostAdd() {
title := c.GetString("title")
content := c.GetString("content")
author := c.GetString("author_id")
if title == "" || content == "" || author == "" {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "Ã¥ÂÂæ°éÂÂ误"}
c.ServeJSON()
return
}
o := orm.NewOrm()
user := models.User{}
if err := o.QueryTable(new(models.User)).Filter("id", author).One(&user); err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "ç¨æ·ä¸ÂÃ¥ÂÂå¨"}
c.ServeJSON()
return
}
post := models.Post{
Title: title,
Content: content,
Author: &user,
}
if _, err := o.Insert(&post); err == nil {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "æ·»å å¸ÂÃ¥ÂÂæÂÂÃ¥ÂÂ"}
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "æ·»å å¸ÂÃ¥ÂÂ失败"}
}
c.ServeJSON()
}
è¿Â段代ç Âå®Âä¹ÂäºÂä¸Â个åÂÂ为 PostController
çÂÂæ§å¶å¨ï¼Â并å®Âç°äºÂ两个å¤ÂçÂÂå½æ°ï¼ÂPostList()
å PostAdd()
ï¼Âç¨äºÂå¤ÂçÂÂä¸Âå¸ÂÃ¥ÂÂç¸åÂ
³çÂÂ请æ±ÂãÂÂ
让æÂÂ们éÂÂæ¥解éÂÂè¿Â段代ç Âï¼Â
- 导堥å @代ç Âä¸Â导堥äºÂä¸ÂäºÂå ï¼Â
- “github.com/beego/beego/v2/client/orm”ï¼Âè¿Âæ¯ Beego ORM å ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½ÂÃ¥ÂÂ对象堳系æ å°ÂãÂÂ
- “github.com/beego/beego/v2/server/web”ï¼Âè¿Âæ¯ Beego Web æÂÂå¡å¨å ï¼Âç¨äºÂå¤ÂçÂÂ请æ±ÂÃ¥ÂÂÃ¥ÂÂåºÂãÂÂ
- “post/models”ï¼Âè¿Âæ¯èªå®Âä¹ÂçÂÂ
models
å ï¼Âç¨äºÂæÂÂä½Âæ°æ®模åÂÂãÂÂ
PostController
ç»ÂæÂÂä½Âï¼ÂPostController
æ¯ä¸Â个æ§å¶å¨ç»ÂæÂÂä½Âï¼Â继æ¿äºÂweb.Controller
ãÂÂPostList()
å½æ°ï¼ÂPostList()
æ¯ä¸Â个å¤ÂçÂÂå½æ°ï¼Âç¨äºÂè·åÂÂå¸ÂÃ¥ÂÂÃ¥ÂÂ表æÂÂÃ¥ÂÂ个å¸ÂÃ¥ÂÂ详æ ãÂÂ
- é¦ÂÃ¥Â
Âï¼ÂéÂÂè¿Â
orm.NewOrm()
Ã¥ÂÂ建ä¸Â个æ°ç ORM 对象o
ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½Âã - æ£ÂæÂ¥æ¯å¦æÂÂ
post_id
Ã¥ÂÂæ°ï¼Âå¦ÂæÂÂ没æÂÂï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂå¸ÂÃ¥ÂÂÃ¥ÂÂ表ãÂÂå¨æ°æ®åºÂä¸Âæ¥询æÂÂæÂÂçÂÂå¸ÂÃ¥ÂÂï¼Â并使ç¨models.PostData()
å½æ°å°Âå¸ÂÃ¥ÂÂÃ¥ÂÂ表转æ¢æÂÂç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ã - å¦ÂæÂÂæÂÂ
post_id
Ã¥ÂÂæ°ï¼Â表示è¦Âè·åÂÂÃ¥ÂÂ个å¸ÂÃ¥ÂÂçÂÂ详æ ãÂÂå¨æ°æ®åºÂä¸Âæ¥询该post_id
对åºÂçÂÂå¸ÂÃ¥ÂÂï¼Â并å°Âå ¶é 读æ°å 1ï¼Âç¶åÂÂå°Âå¸ÂÃ¥ÂÂ详æ 转æ¢æÂÂç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ã - æÂÂÃ¥ÂÂï¼Âå°Âå¤ÂçÂÂç»ÂæÂÂ以 JSON æ ¼å¼Âè¿ÂÃ¥ÂÂãÂÂ
PostAdd()
å½æ°ï¼ÂPostAdd()
æ¯ä¸Â个å¤ÂçÂÂå½æ°ï¼Âç¨äºÂæ·»å æ°çÂÂå¸ÂÃ¥ÂÂãÂÂ
- è·åÂÂ请æ±ÂÃ¥ÂÂæ°
title
ãÂÂcontent
Ã¥ÂÂauthor_id
ï¼Âå¦ÂæÂÂè¿ÂäºÂÃ¥ÂÂæ°æÂÂ为空çÂÂæ åÂ括ÂÃ¥ÂÂè¿ÂÃ¥ÂÂÃ¥ÂÂæ°éÂÂ误ã - Ã¥ÂÂ建ä¸Â个æ°ç ORM 对象
o
ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½Âã - æ ¹æ®
author_id
æ¥询对åºÂçÂÂç¨æ·ï¼Âå¦ÂæÂÂç¨æ·ä¸ÂÃ¥ÂÂå¨ï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂç¨æ·ä¸ÂÃ¥ÂÂå¨çÂÂéÂÂ误ã - Ã¥ÂÂ建ä¸Â个æ°çÂÂ
Post
ç»ÂæÂÂä½Âï¼Âå¡«å  å¸ÂÃ¥ÂÂçÂÂæ Âé¢ÂãÂÂå 容åÂÂä½Âè ã - å°Âå¸ÂÃ¥ÂÂæÂÂå ¥æ°æ®åºÂï¼Âå¦ÂæÂÂæÂÂå ¥æÂÂÃ¥ÂÂï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂæ·»å å¸ÂÃ¥ÂÂæÂÂÃ¥ÂÂçÂÂæ¶Âæ¯ï¼Âå¦åÂÂè¿ÂÃ¥ÂÂæ·»å å¸ÂÃ¥ÂÂ失败çÂÂæ¶Âæ¯ãÂÂ
- æÂÂÃ¥ÂÂï¼Âå°Âå¤ÂçÂÂç»ÂæÂÂ以 JSON æ ¼å¼Âè¿ÂÃ¥ÂÂãÂÂ
controllers/comment.go
package controllers
import (
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/server/web"
"post/models"
)
type CommentController struct {
web.Controller
}
func (c *CommentController) CommentList() {
o := orm.NewOrm()
postId, _ := c.GetInt("post_id", 0)
commentId, _ := c.GetInt("comment_id", 0)
if postId == 0 {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "Ã¥ÂÂæ°éÂÂ误"}
c.ServeJSON()
return
}
if commentId == 0 {
var comments []models.Comment
if _, err := o.QueryTable(new(models.Comment)).RelatedSel().Filter("post_id", postId).All(&comments); err == nil {
c.Data["json"] = map[string]interface{}{"code": 200, "count": len(comments), "data": models.CommentData(comments)}
c.ServeJSON()
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "è·åÂÂè¯Â论åÂÂ表失败"}
c.ServeJSON()
}
} else {
var comment models.Comment
if err := o.QueryTable(new(models.Comment)).Filter("id", commentId).RelatedSel().One(&comment); err == nil {
c.Data["json"] = map[string]interface{}{"code": 200, "data": models.CommentData([]models.Comment{comment})}
c.ServeJSON()
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "è·åÂÂè¯Â论失败"}
c.ServeJSON()
}
}
}
func (c *CommentController) CommentAdd() {
postId := c.GetString("post_id")
content := c.GetString("content")
author := c.GetString("author_id")
if postId == "" || content == "" || author == "" {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "Ã¥ÂÂæ°éÂÂ误"}
c.ServeJSON()
return
}
o := orm.NewOrm()
user := models.User{}
post := models.Post{}
if err := o.QueryTable(new(models.User)).Filter("id", author).One(&user); err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "ç¨æ·ä¸ÂÃ¥ÂÂå¨"}
c.ServeJSON()
return
}
if err := o.QueryTable(new(models.Post)).Filter("id", postId).One(&post); err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "å¸ÂÃ¥ÂÂä¸ÂÃ¥ÂÂå¨"}
c.ServeJSON()
return
}
comment := models.Comment{
Content: content,
Post: &post,
Author: &user,
}
if _, err := o.Insert(&comment); err == nil {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "æ·»å è¯Â论æÂÂÃ¥ÂÂ"}
} else {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "æ·»å è¯Â论失败"}
}
c.ServeJSON()
}
è¿Â段代ç Âå®Âä¹ÂäºÂä¸Â个åÂÂ为 CommentController
çÂÂæ§å¶å¨ï¼Â并å®Âç°äºÂ两个å¤ÂçÂÂå½æ°ï¼ÂCommentList()
å CommentAdd()
ï¼Âç¨äºÂå¤ÂçÂÂä¸Âè¯Â论ç¸åÂ
³çÂÂ请æ±ÂãÂÂ
让æÂÂ们éÂÂæ¥解éÂÂè¿Â段代ç Âï¼Â
- 导堥å @代ç Âä¸Â导堥äºÂä¸ÂäºÂå ï¼Â
- “github.com/beego/beego/v2/client/orm”ï¼Âè¿Âæ¯ Beego ORM å ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½ÂÃ¥ÂÂ对象堳系æ å°ÂãÂÂ
- “github.com/beego/beego/v2/server/web”ï¼Âè¿Âæ¯ Beego Web æÂÂå¡å¨å ï¼Âç¨äºÂå¤ÂçÂÂ请æ±ÂÃ¥ÂÂÃ¥ÂÂåºÂãÂÂ
- “post/models”ï¼Âè¿Âæ¯èªå®Âä¹ÂçÂÂ
models
å ï¼Âç¨äºÂæÂÂä½Âæ°æ®模åÂÂãÂÂ
CommentController
ç»ÂæÂÂä½Âï¼ÂCommentController
æ¯ä¸Â个æ§å¶å¨ç»ÂæÂÂä½Âï¼Â继æ¿äºÂweb.Controller
ãÂÂCommentList()
å½æ°ï¼ÂCommentList()
æ¯ä¸Â个å¤ÂçÂÂå½æ°ï¼Âç¨äºÂè·åÂÂè¯Â论åÂÂ表æÂÂÃ¥ÂÂ个è¯Â论详æ ãÂÂ
- é¦ÂÃ¥Â
Âï¼ÂéÂÂè¿Â
orm.NewOrm()
Ã¥ÂÂ建ä¸Â个æ°ç ORM 对象o
ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½Âã - æ£ÂæÂ¥æ¯å¦æÂÂ
post_id
Ã¥ÂÂæ°åÂÂcomment_id
Ã¥ÂÂæ°ï¼Âå¦ÂæÂÂpost_id
Ã¥ÂÂæ°为空ï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂÃ¥ÂÂæ°éÂÂ误ã - å¦ÂæÂÂ
comment_id
Ã¥ÂÂæ°为空ï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂå¸ÂÃ¥ÂÂçÂÂè¯Â论åÂÂ表ãÂÂå¨æ°æ®åºÂä¸Âæ¥询post_id
对åºÂçÂÂå¸ÂÃ¥ÂÂçÂÂæÂÂæÂÂè¯Â论ï¼Â并使ç¨models.CommentData()
å½æ°å°Âè¯Â论åÂÂ表转æ¢æÂÂç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ã - å¦ÂæÂÂ
comment_id
Ã¥ÂÂæ°ä¸Â为空ï¼ÂÃ¥ÂÂ表示è¦Âè·åÂÂÃ¥ÂÂ个è¯Â论çÂÂ详æ ãÂÂå¨æ°æ®åºÂä¸Âæ¥询该comment_id
对åºÂçÂÂè¯Â论ï¼Â并å°Â堶转æ¢æÂÂç¹å®Âæ ¼å¼ÂçÂÂæ°æ®ã - æÂÂÃ¥ÂÂï¼Âå°Âå¤ÂçÂÂç»ÂæÂÂ以 JSON æ ¼å¼Âè¿ÂÃ¥ÂÂãÂÂ
CommentAdd()
å½æ°ï¼ÂCommentAdd()
æ¯ä¸Â个å¤ÂçÂÂå½æ°ï¼Âç¨äºÂæ·»å æ°çÂÂè¯Â论ãÂÂ
- è·åÂÂ请æ±ÂÃ¥ÂÂæ°
post_id
ãÂÂcontent
Ã¥ÂÂauthor_id
ï¼Âå¦ÂæÂÂè¿ÂäºÂÃ¥ÂÂæ°æÂÂ为空çÂÂæ åÂ括ÂÃ¥ÂÂè¿ÂÃ¥ÂÂÃ¥ÂÂæ°éÂÂ误ã - Ã¥ÂÂ建ä¸Â个æ°ç ORM 对象
o
ï¼Âç¨äºÂè¿Âè¡Âæ°æ®åºÂæÂÂä½Âã - æ ¹æ®
author_id
æ¥询对åºÂçÂÂç¨æ·ï¼Âå¦ÂæÂÂç¨æ·ä¸ÂÃ¥ÂÂå¨ï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂç¨æ·ä¸ÂÃ¥ÂÂå¨çÂÂéÂÂ误ã - æ ¹æ®
post_id
æ¥询对åºÂçÂÂå¸ÂÃ¥ÂÂï¼Âå¦ÂæÂÂå¸ÂÃ¥ÂÂä¸ÂÃ¥ÂÂå¨ï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂå¸ÂÃ¥ÂÂä¸ÂÃ¥ÂÂå¨çÂÂéÂÂ误ã - Ã¥ÂÂ建ä¸Â个æ°çÂÂ
Comment
ç»ÂæÂÂä½Âï¼Âå¡«å  è¯Â论çÂÂå 容ãÂÂå¸ÂÃ¥ÂÂÃ¥ÂÂä½Âè ã - å°Âè¯Â论æÂÂå ¥æ°æ®åºÂï¼Âå¦ÂæÂÂæÂÂå ¥æÂÂÃ¥ÂÂï¼ÂÃ¥ÂÂè¿ÂÃ¥ÂÂæ·»å è¯Â论æÂÂÃ¥ÂÂçÂÂæ¶Âæ¯ï¼Âå¦åÂÂè¿ÂÃ¥ÂÂæ·»å è¯Â论失败çÂÂæ¶Âæ¯ãÂÂ
- æÂÂÃ¥ÂÂï¼Âå°Âå¤ÂçÂÂç»ÂæÂÂ以 JSON æ ¼å¼Âè¿ÂÃ¥ÂÂãÂÂ
æÂ¥å£æµÂè¯Â
è¿Âè¡Â该beego项ç®ï¼Âå½令为bee run
ï¼Âç¶åÂÂ使ç¨postman
软件è¿Âè¡ÂæÂ¥å£æµÂè¯ÂãÂÂ
é¦Âå ÂæÂÂå¨æ°æ®åºÂæÂÂå ¥äºÂ两æ¡ç¨æ·æ°æ®ï¼Âæ¹便åÂÂç»ÂçÂÂæÂ¥å£æµÂè¯Âï¼Â
æµÂè¯Âå¢Âå å¸ÂÃ¥ÂÂ
å¨表åÂÂè¾Âå ¥æ£确çÂÂÃ¥ÂÂæ°ï¼Â
å¨表åÂÂè¾ÂÃ¥Â
¥éÂÂ误çÂÂÃ¥ÂÂæ°ï¼Â没æÂÂæÂÂ交content
ï¼Âï¼Â
å¢Âå å¸ÂÃ¥ÂÂæÂ¥å£æµÂè¯ÂæÂÂÃ¥ÂÂãÂÂ
æµÂè¯ÂæÂ¥çÂÂå¸ÂÃ¥ÂÂ
ä¸Âå åÂÂæ°ï¼Âæ¥询æÂÂæÂÂå¸ÂÃ¥ÂÂï¼Â
å åÂ
Â¥post_id
Ã¥ÂÂæ°ï¼Âæ¥询åÂÂ个å¸ÂÃ¥ÂÂï¼Â
æÂ¥çÂÂå¸ÂÃ¥ÂÂæÂ¥å£æµÂè¯ÂæÂÂÃ¥ÂÂãÂÂ
æµÂè¯Âå¢Âå è¯Â论
å¦ÂæÂÂç¨æ·ä¸ÂÃ¥ÂÂå¨ï¼Â
å¦ÂæÂÂå¸ÂÃ¥ÂÂä¸ÂÃ¥ÂÂå¨ï¼Â
å¦ÂæÂÂ缺å°ÂÃ¥ÂÂæ°ï¼Â
å¢Âå è¯Â论æÂ¥å£æµÂè¯ÂæÂÂÃ¥ÂÂãÂÂ
æµÂè¯ÂæÂ¥çÂÂè¯Â论
æÂ¥çÂÂæÂÂ个å¸ÂÃ¥ÂÂçÂÂæÂÂæÂÂè¯Â论ï¼Â
æÂ¥çÂÂæÂÂ个å¸ÂÃ¥ÂÂçÂÂæÂÂæ¡è¯Â论ï¼Â
ä¸Âä¼ åÂ
Â¥post_id
ï¼Â
ä¼ åÂ
¥ä¸ÂÃ¥ÂÂå¨çÂÂpost_id
æ¾示没æÂÂè¯Â论ï¼Âä¹Âå¯以修æ¹代ç Âï¼Âè¿ÂÃ¥ÂÂå¸ÂÃ¥ÂÂä¸ÂÃ¥ÂÂå¨çÂÂæ¶Âæ¯ï¼Âï¼Â
æÂ¥çÂÂè¯Â论æÂ¥å£æµÂè¯ÂæÂÂÃ¥ÂÂãÂÂ