[ja] Translate 13.5.md into Japanese.
This commit is contained in:
259
ja/ebook/13.5.md
Normal file
259
ja/ebook/13.5.md
Normal file
@@ -0,0 +1,259 @@
|
||||
# 13.5 ブログの追加/削除/修正の実装
|
||||
|
||||
前ではbeegoフレームワークの全体的な構造思想の実装とニセコードの一部の実装についてご紹介しました。この節ではbeegoを通してブログシステムを設計しましょう。これにはブログの閲覧、追加、修正、削除といった操作が含まれます。
|
||||
## ブログディレクトリ
|
||||
ブログディレクトリは以下のようになります:
|
||||
|
||||
/main.go
|
||||
/views:
|
||||
/view.tpl
|
||||
/new.tpl
|
||||
/layout.tpl
|
||||
/index.tpl
|
||||
/edit.tpl
|
||||
/models/model.go
|
||||
/controllers:
|
||||
/index.go
|
||||
/view.go
|
||||
/new.go
|
||||
/delete.go
|
||||
/edit.go
|
||||
|
||||
|
||||
## ブログのルーティング
|
||||
ブログの主なルーティング規則は以下のようになります:
|
||||
|
||||
//ブログのトップページを表示
|
||||
beego.RegisterController("/", &controllers.IndexController{})
|
||||
//ブログの詳細な情報を検索
|
||||
beego.RegisterController("/view/:id([0-9]+)", &controllers.ViewController{})
|
||||
//ブログの文章を作成
|
||||
beego.RegisterController("/new", &controllers.NewController{})
|
||||
//ブログの削除
|
||||
beego.RegisterController("/delete/:id([0-9]+)", &controllers.DeleteController{})
|
||||
//ブログの編集
|
||||
beego.RegisterController("/edit/:id([0-9]+)", &controllers.EditController{})
|
||||
|
||||
|
||||
## データベーススキーマ
|
||||
データベースの設計は最も簡単なブログ情報です
|
||||
|
||||
CREATE TABLE entries (
|
||||
id INT AUTO_INCREMENT,
|
||||
title TEXT,
|
||||
content TEXT,
|
||||
created DATETIME,
|
||||
primary key (id)
|
||||
);
|
||||
|
||||
## コントローラ
|
||||
IndexController:
|
||||
|
||||
type IndexController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (this *IndexController) Get() {
|
||||
this.Data["blogs"] = models.GetAll()
|
||||
this.Layout = "layout.tpl"
|
||||
this.TplNames = "index.tpl"
|
||||
}
|
||||
|
||||
ViewController:
|
||||
|
||||
type ViewController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (this *ViewController) Get() {
|
||||
inputs := this.Input()
|
||||
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||
this.Data["Post"] = models.GetBlog(id)
|
||||
this.Layout = "layout.tpl"
|
||||
this.TplNames = "view.tpl"
|
||||
}
|
||||
|
||||
NewController
|
||||
|
||||
type NewController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (this *NewController) Get() {
|
||||
this.Layout = "layout.tpl"
|
||||
this.TplNames = "new.tpl"
|
||||
}
|
||||
|
||||
func (this *NewController) Post() {
|
||||
inputs := this.Input()
|
||||
var blog models.Blog
|
||||
blog.Title = inputs.Get("title")
|
||||
blog.Content = inputs.Get("content")
|
||||
blog.Created = time.Now()
|
||||
models.SaveBlog(blog)
|
||||
this.Ctx.Redirect(302, "/")
|
||||
}
|
||||
|
||||
EditController
|
||||
|
||||
type EditController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (this *EditController) Get() {
|
||||
inputs := this.Input()
|
||||
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||
this.Data["Post"] = models.GetBlog(id)
|
||||
this.Layout = "layout.tpl"
|
||||
this.TplNames = "new.tpl"
|
||||
}
|
||||
|
||||
func (this *EditController) Post() {
|
||||
inputs := this.Input()
|
||||
var blog models.Blog
|
||||
blog.Id, _ = strconv.Atoi(inputs.Get("id"))
|
||||
blog.Title = inputs.Get("title")
|
||||
blog.Content = inputs.Get("content")
|
||||
blog.Created = time.Now()
|
||||
models.SaveBlog(blog)
|
||||
this.Ctx.Redirect(302, "/")
|
||||
}
|
||||
|
||||
DeleteController
|
||||
|
||||
type DeleteController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func (this *DeleteController) Get() {
|
||||
inputs := this.Input()
|
||||
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||
this.Data["Post"] = models.DelBlog(id)
|
||||
this.Ctx.Redirect(302, "/")
|
||||
}
|
||||
|
||||
## modelレイヤ
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/astaxie/beedb"
|
||||
_ "github.com/ziutek/mymysql/godrv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Blog struct {
|
||||
Id int `PK`
|
||||
Title string
|
||||
Content string
|
||||
Created time.Time
|
||||
}
|
||||
|
||||
func GetLink() beedb.Model {
|
||||
db, err := sql.Open("mymysql", "blog/astaxie/123456")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
orm := beedb.New(db)
|
||||
return orm
|
||||
}
|
||||
|
||||
func GetAll() (blogs []Blog) {
|
||||
db := GetLink()
|
||||
db.FindAll(&blogs)
|
||||
return
|
||||
}
|
||||
|
||||
func GetBlog(id int) (blog Blog) {
|
||||
db := GetLink()
|
||||
db.Where("id=?", id).Find(&blogs)
|
||||
return
|
||||
}
|
||||
|
||||
func SaveBlog(blog Blog) (bg Blog) {
|
||||
db := GetLink()
|
||||
db.Save(&blog)
|
||||
return bg
|
||||
}
|
||||
|
||||
func DelBlog(blog Blog) {
|
||||
db := GetLink()
|
||||
db.Delete(&blog)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
## viewレイヤ
|
||||
|
||||
layout.tpl
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>My Blog</title>
|
||||
<style>
|
||||
#menu {
|
||||
width: 200px;
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<ul id="menu">
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/new">New Post</a></li>
|
||||
</ul>
|
||||
|
||||
{{.LayoutContent}}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
index.tpl
|
||||
|
||||
<h1>Blog posts</h1>
|
||||
|
||||
<ul>
|
||||
{{range .blogs}}
|
||||
<li>
|
||||
<a href="/view/{{.Id}}">{{.Title}}</a>
|
||||
from {{.Created}}
|
||||
<a href="/edit/{{.Id}}">Edit</a>
|
||||
<a href="/delete/{{.Id}}">Delete</a>
|
||||
</li>
|
||||
{{end}}
|
||||
</ul>
|
||||
|
||||
view.tpl
|
||||
|
||||
<h1>{{.Post.Title}}</h1>
|
||||
{{.Post.Created}}<br/>
|
||||
|
||||
{{.Post.Content}}
|
||||
|
||||
new.tpl
|
||||
|
||||
<h1>New Blog Post</h1>
|
||||
<form action="" method="post">
|
||||
タイトル:<input type="text" name="title"><br>
|
||||
内容:<textarea name="content" colspan="3" rowspan="10"></textarea>
|
||||
<input type="submit">
|
||||
</form>
|
||||
|
||||
edit.tpl
|
||||
|
||||
<h1>Edit {{.Post.Title}}</h1>
|
||||
|
||||
<h1>New Blog Post</h1>
|
||||
<form action="" method="post">
|
||||
タイトル:<input type="text" name="title" value="{{.Post.Title}}"><br>
|
||||
内容:<textarea name="content" colspan="3" rowspan="10">{{.Post.Content}}</textarea>
|
||||
<input type="hidden" name="id" value="{{.Post.Id}}">
|
||||
<input type="submit">
|
||||
</form>
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [データベースの操作](<13.4.md>)
|
||||
* 次へ: [概要](<13.6.md>)
|
||||
Reference in New Issue
Block a user