Skip to content

Commit 1b85586

Browse files
committed
Fix failing build for a Japanese version because of template tags
1 parent 58cfbca commit 1b85586

File tree

13 files changed

+102
-76
lines changed

13 files changed

+102
-76
lines changed

ja/04.3.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 4.3 クロスサイトスクリプティングの予防
23

34
現在のホームページは大量の動的なコンテンツを含みユーザのエクスペリエンスを高めています。以前に比べてとても複雑になっています。いわゆる動的なコンテンツとはユーザの環境と要求に応じてWebアプリケーションが目的の内容を出力できることを指します。動的なホームページは"クロスサイトスクリプティング"(Cross Site Scripting、セキュリティ専門家が一般的にXSSと省略するもの)と呼ばれる攻撃を受けることがあります。
@@ -66,3 +67,4 @@ Goのhtml/templateパッケージはデフォルトでhtmlタグをフィルタ
6667
* [目次](<preface.md>)
6768
* 前へ: [入力値の検証](<04.2.md>)
6869
* 次へ: [フォームの複数回送信の防止](<04.4.md>)
70+
{% endraw %}

ja/04.5.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 4.5 ファイルのアップロード処理
23

34
ユーザによるファイルのアップロードを処理したいとします。例えば、現在Instagramのようなホームページを作成しているとします。ユーザが撮影した写真を保存する必要があります。このような要求はどのように実現するのでしょうか?
@@ -115,7 +116,7 @@
115116
return err
116117
}
117118
defer fh.Close()
118-
119+
119120
//iocopy
120121
_, err = io.Copy(fileWriter, fh)
121122
if err != nil {
@@ -155,3 +156,4 @@
155156
* [目次](<preface.md>)
156157
* 前へ: [フォームの多重送信の防止](<04.4.md>)
157158
* 次へ: [まとめ](<04.6.md>)
159+
{% endraw %}

ja/06.4.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 6.4 sessionハイジャックの予防
23
sessionハイジャックは広範囲に存在する比較的重大な脆弱性です。session技術において、クライアントサイドとサーバサイドはsessionのIDによってセッションを維持します。しかしこのIDは簡単にスニッフィングされ、第三者に利用されてしまいます。これは中間者攻撃の一種です。
34

@@ -87,3 +88,4 @@ sessionが始まると、生成されたsessionIDの時間を記録する一つ
8788
* [目次](<preface.md>)
8889
* 前へ: [sessionストレージ](<06.3.md>)
8990
* 次へ: [まとめ](<06.5.md>)
91+
{% endraw %}

ja/07.1.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 7.1 XMLの処理
23
XMLはデータと情報のやりとりするための形式として十分普及しています。Webサービスが日々広範囲で応用されてくるにつれ、現在XMLは日常的な開発作業において重要な役割を演じてきました。この節ではGo言語の標準パッケージにあるXML関連のパッケージをご紹介します。
34

@@ -219,3 +220,4 @@ XMLをstructに解析する際は以下のルールに従います: 
219220
* [目次](<preface.md>)
220221
* 前へ: [テキスト処理](<07.0.md>)
221222
* 次へ: [Jsonの処理](<07.2.md>)
223+
{% endraw %}

ja/07.4.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 7.4 テンプレートの処理
23
## テンプレートとは何か
34
おそらくあなたはMVCのデザインパターンについて聞いたことがあると思います。Modelはデータを処理を、Viewは表示結果を、Controllerはユーザのリクエストの制御を行います。Viewレイヤーの処理では、多くの動的な言語ではどれも静的なHTMLの中に動的言語が生成したデータを挿入します。例えばJSPでは`<%=....=%>`を挿入することで、PHPでは`<?php.....?>`を挿入することで実現します。
@@ -348,3 +349,4 @@ Webアプリケーションを作る時はテンプレートの一部が固定
348349
* [目次](<preface.md>)
349350
* 前へ: [正規表現の処理](<07.3.md>)
350351
* 次へ: [ファイルの操作](<07.5.md>)
352+
{% endraw %}

ja/09.1.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 9.1 CSRF攻撃の予防
23

34
## CSRFとは何か 
@@ -91,3 +92,4 @@ tokenを検証
9192
* [目次](<preface.md>)
9293
* 前へ: [セキュリティと暗号化](<09.0.md>)
9394
* 次へ: [入力フィルタリングの確保](<09.2.md>)
95+
{% endraw %}

ja/10.2.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 10.2 ローカライズリソース
23
前の節ではどのようにしてLocaleを設定するかご紹介しました。Localeを設定したあとはどのようにしてLocaleに対応する情報を保存するかという問題を解決する必要があります。ここでの情報とは以下の内容を含みます:テキスト情報、時間と日時、通貨の値、画像、ファイルや動画といったリソース等です。ここではこれらの情報に対してご紹介していきたいと思います。Go言語ではこれらのフォーマットの情報をJSONに保存します。その後それぞれ適した方法によって表示します。(以下では日本語と英語の2つの言語を対比して例を挙げます。保存の形式はそれぞれen.jsonとja-JP.jsonです。)
34
## ローカライズテキスト情報
@@ -132,3 +133,4 @@ Localeの違いによってビューを表示させる場合もあるかもし
132133
* [目次](<preface.md>)
133134
* 前へ: [デフォルトロケールの設定](<10.1.md>)
134135
* 次へ: [国際化サイト](<10.3.md>)
136+
{% endraw %}

ja/10.3.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 10.3 国際化サイト
23
前の節でどのようにしてローカライズリソースを処理するかご紹介しました。Localeに対応した設定ファイルです。ではもし複数のローカライズリソースを処理する場合は?いくつかの我々が通常使用する例は:簡単なテキスト翻訳、時間や日時、数字といったものはどのように処理するのでしょうか?この節では一つ一つこれらの問題を解決していきます。
34
## 複数のロケールパッケージの管理
@@ -178,3 +179,4 @@
178179
* [目次](<preface.md>)
179180
* 前へ: [ローカライズリソース](<10.2.md>)
180181
* 次へ: [まとめ](<10.4.md>)
182+
{% endraw %}

ja/12.2.md

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
{% raw %}
12
# 12.2 サイトエラー処理
23
我々のWebアプリケーションが一旦実運用されると、さまざまなエラーが発生する可能性があります。Webアプリケーションの日常の実行ではいくつものエラーが発生する可能性があります。具体的には以下のとおり:
34

45
- データベースエラー:データベースサーバへのアクセスまたはデータと関係のあるエラーです。例えば、以下は何らかのデータベースエラーを発生させることがあります。
5-
6+
67
- 接続エラー:このエラーはデータベースサーバのネットワークが切断された時や、ユーザ名とパスワードが不正だった場合、またはデータベースが存在しない場合に発生することがあります。
78
- 検索エラー:使用されたSQLが正しく無く、エラーが発生する場合です。このようなSQLエラーはもしプログラムに厳格なテストを行うことで回避できます。
89
- データエラー:データベースの約束が衝突する場合。例えば一つしかないフィールドに複数の主キーを持つデータが挿入されるとエラーを発生させます。しかし、あなたのアプリケーションプログラムが運用される前に厳格なテストを行うことでこれらの問題を回避することもできます。
@@ -27,9 +28,9 @@
2728
エラー処理は実は我々も第十一章の第一節でどのようにエラー処理を設計するかご紹介しました。ここではまたひとつの例から詳細にご解説します。どのように異なるエラーを処理するのでしょうか:
2829

2930
- ユーザにエラーが発生したことを通知する:
30-
31+
3132
ユーザがページにアクセスした時はふたつのエラーがあります:404.htmlとerror.htmlです。以下はそれぞれエラーページを表示するソースです:
32-
33+
3334
<html lang="en">
3435
<head>
3536
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -51,7 +52,7 @@
5152
</body>
5253
</html>
5354
もうひとつのソース:
54-
55+
5556
<html lang="en">
5657
<head>
5758
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -72,9 +73,9 @@
7273
</div>
7374
</body>
7475
</html>
75-
76+
7677
404のエラー処理ロジック、もしシステムのエラーだった場合もにたような操作になります。以下を見てみましょう:
77-
78+
7879
func (p *MyMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
7980
if r.URL.Path == "/" {
8081
sayhelloName(w, r)
@@ -90,7 +91,7 @@
9091
ErrorInfo := "ファイルが見つかりません" //現在のユーザ情報を取得
9192
t.Execute(w, ErrorInfo) //テンプレートのmerger操作を実行
9293
}
93-
94+
9495
func SystemError(w http.ResponseWriter, r *http.Request) {
9596
log.Critical("システムエラー") //システムエラーはクリティカルですので、ログに記録するだけでなくメールを送信します。
9697
t, _ = t.ParseFiles("tmpl/error.html", nil) //テンプレートファイルを解析
@@ -109,7 +110,7 @@
109110
username = ""
110111
}
111112
}()
112-
113+
113114
username = User[uid]
114115
return
115116
}
@@ -122,3 +123,4 @@
122123
* [目次](<preface.md>)
123124
* 前へ: [アプリケーションログ](<12.1.md>)
124125
* 次へ: [アプリケーションのデプロイ](<12.3.md>)
126+
{% endraw %}

ja/13.3.md

+22-20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% raw %}
12
# 13.3 controller設計
23

34
伝統的なMVCフレームワークにおいて、多くの場合Action設計のサフィックス反映にもとづいています、しかしながら、現在webではREST風のフレームワークが流行しています。なるべくFilterかrewriteを使用してURLのリライトを行い、REST風のURLを実現しています。しかしなぜ直接新しくREST風のMVCフレームワークを設計しないのでしょうか?本章ではこういった考え方に基いてどのようにREST風のMVCフレームワークにフルスクラッチでcontroller、最大限に簡素化されたWebアプリケーションの開発、ひいては一行で可能な"Hello, world"の実装についてご説明します。
@@ -17,7 +18,7 @@ MVC設計は現在Webアプリケーションの開発において最もよく
1718
Layout []string
1819
TplExt string
1920
}
20-
21+
2122
type ControllerInterface interface {
2223
Init(ct *Context, cn string) //コンテキストとサブクラスの名前を初期化
2324
Prepare() //実行前のいくつかの処理を開始
@@ -31,7 +32,7 @@ MVC設計は現在Webアプリケーションの開発において最もよく
3132
Finish() //実行完了後の処理
3233
Render() error //methodが対応する方法を実行し終えた後、ページを構築
3334
}
34-
35+
3536
前にadd関数へのルータをご紹介した際ControllerInterfaceクラスを定義しました。ですので、ここではこのインターフェースを実装すれば十分です。基底クラスのContorollerの実装は以下のようなメソッドになります:
3637

3738
func (c *Controller) Init(ct *Context, cn string) {
@@ -42,43 +43,43 @@ MVC設計は現在Webアプリケーションの開発において最もよく
4243
c.Ct = ct
4344
c.TplExt = "tpl"
4445
}
45-
46+
4647
func (c *Controller) Prepare() {
47-
48+
4849
}
49-
50+
5051
func (c *Controller) Finish() {
51-
52+
5253
}
53-
54+
5455
func (c *Controller) Get() {
5556
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
5657
}
57-
58+
5859
func (c *Controller) Post() {
5960
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
6061
}
61-
62+
6263
func (c *Controller) Delete() {
6364
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
6465
}
65-
66+
6667
func (c *Controller) Put() {
6768
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
6869
}
69-
70+
7071
func (c *Controller) Head() {
7172
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
7273
}
73-
74+
7475
func (c *Controller) Patch() {
7576
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
7677
}
77-
78+
7879
func (c *Controller) Options() {
7980
http.Error(c.Ct.ResponseWriter, "Method Not Allowed", 405)
8081
}
81-
82+
8283
func (c *Controller) Render() error {
8384
if len(c.Layout) > 0 {
8485
var filenames []string
@@ -108,10 +109,10 @@ MVC設計は現在Webアプリケーションの開発において最もよく
108109
}
109110
return nil
110111
}
111-
112+
112113
func (c *Controller) Redirect(url string, code int) {
113114
c.Ct.Redirect(code, url)
114-
}
115+
}
115116

116117
上のcontroller基底クラスはインターフェースが定義する関数を実装しています。urlにもとづいてルータが対応するcontrollerを実行する原則に従って、以下のように実行されます:
117118

@@ -125,21 +126,21 @@ MVC設計は現在Webアプリケーションの開発において最もよく
125126
上ではbeegoフレームワークにおいてcontroller基底クラスの設計を完成させました。我々のアプリケーションでは我々のメソッドを以下のように設計することができます:
126127

127128
package controllers
128-
129+
129130
import (
130131
"github.com/astaxie/beego"
131132
)
132-
133+
133134
type MainController struct {
134135
beego.Controller
135136
}
136-
137+
137138
func (this *MainController) Get() {
138139
this.Data["Username"] = "astaxie"
139140
this.Data["Email"] = "[email protected]"
140141
this.TplNames = "index.tpl"
141142
}
142-
143+
143144
上のメソッドではサブクラスMainControllerを実装し、Getメソッドを実装しています。もしユーザがその他のメソッド(POST/HEAD等)によってこのリソースにアクセスすると、403を返します。もしGetであれば、AutoRender=trueを設定していますのでGetメソッドの実行後自動的にRender関数が実行され、以下のようなインターフェースが表示されます:
144145

145146
![](images/13.4.beego.png?raw=true)
@@ -161,3 +162,4 @@ index.tplのコードは以下のようになります。データの設定と
161162
* [目次](<preface.md>)
162163
* 前へ: [カスタム定義のルータの設計](<13.2.md>)
163164
* 次へ: [ログとコンフィグ設計](<13.4.md>)
165+
{% endraw %}

0 commit comments

Comments
 (0)