From a243fea88b43af2b2a03429ea4d0c32f0f61b358 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 8 Dec 2017 09:50:11 +0800 Subject: [PATCH] =?UTF-8?q?mvc=E6=A1=86=E6=9E=B6=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/frame/mvc/controller.go | 8 +++++ g/frame/mvc/controller_rest.go | 8 +++++ g/frame/mvc/model.go | 1 + g/frame/mvc/view.go | 1 + g/net/ghttp/http_client_request.go | 30 ++++++++++++++++++- g/net/ghttp/http_server_response.go | 17 +++++++---- geg/{types => container}/gbtree.go | 0 geg/{db => database}/mysql/mysql.go | 0 geg/{db => database}/pgsql/pgsql.go | 0 geg/frame/mvc/controller/user/user.go | 30 +++++++++++++++++++ .../mvc/controller/user/user_register.go | 25 ++++++++++++++++ geg/{net/controller => frame/mvc}/main.go | 3 +- geg/net/controller/controller/user.go | 19 ------------ 13 files changed, 116 insertions(+), 26 deletions(-) create mode 100644 g/frame/mvc/controller.go create mode 100644 g/frame/mvc/controller_rest.go create mode 100644 g/frame/mvc/model.go create mode 100644 g/frame/mvc/view.go rename geg/{types => container}/gbtree.go (100%) rename geg/{db => database}/mysql/mysql.go (100%) rename geg/{db => database}/pgsql/pgsql.go (100%) create mode 100644 geg/frame/mvc/controller/user/user.go create mode 100644 geg/frame/mvc/controller/user/user_register.go rename geg/{net/controller => frame/mvc}/main.go (74%) delete mode 100644 geg/net/controller/controller/user.go diff --git a/g/frame/mvc/controller.go b/g/frame/mvc/controller.go new file mode 100644 index 000000000..02fc204e8 --- /dev/null +++ b/g/frame/mvc/controller.go @@ -0,0 +1,8 @@ +package mvc + +import "gitee.com/johng/gf/g/net/ghttp" + +// 控制器基类 +type Controller struct { + ghttp.Controller +} diff --git a/g/frame/mvc/controller_rest.go b/g/frame/mvc/controller_rest.go new file mode 100644 index 000000000..e69517352 --- /dev/null +++ b/g/frame/mvc/controller_rest.go @@ -0,0 +1,8 @@ +package mvc + +import "gitee.com/johng/gf/g/net/ghttp" + +// 基于RESTful格式的控制器 +type Controller_Rest struct { + ghttp.ControllerRest +} diff --git a/g/frame/mvc/model.go b/g/frame/mvc/model.go new file mode 100644 index 000000000..317536536 --- /dev/null +++ b/g/frame/mvc/model.go @@ -0,0 +1 @@ +package mvc diff --git a/g/frame/mvc/view.go b/g/frame/mvc/view.go new file mode 100644 index 000000000..317536536 --- /dev/null +++ b/g/frame/mvc/view.go @@ -0,0 +1 @@ +package mvc diff --git a/g/net/ghttp/http_client_request.go b/g/net/ghttp/http_client_request.go index aa7c33047..0b053269e 100644 --- a/g/net/ghttp/http_client_request.go +++ b/g/net/ghttp/http_client_request.go @@ -3,9 +3,10 @@ package ghttp import ( "io/ioutil" "gitee.com/johng/gf/g/encoding/gjson" + "strconv" ) -// 获得get参数 +// 获得指定名称的get参数列表 func (r *ClientRequest) GetQuery(k string) []string { if r.getvals == nil { values := r.URL.Query() @@ -17,6 +18,20 @@ func (r *ClientRequest) GetQuery(k string) []string { return nil } +// 获取指定名称的参数int类型 +func (r *ClientRequest) GetQueryInt(k string) int { + v := r.GetQuery(k) + if v == nil { + return -1 + } else { + if i, err := strconv.Atoi(v[0]); err != nil { + return -1 + } else { + return i + } + } +} + func (r *ClientRequest) GetQueryString(k string) string { v := r.GetQuery(k) if v == nil { @@ -57,6 +72,19 @@ func (r *ClientRequest) GetPost(k string) []string { return nil } +func (r *ClientRequest) GetPostInt(k string) int { + v := r.GetPost(k) + if v == nil { + return -1 + } else { + if i, err := strconv.Atoi(v[0]); err != nil { + return -1 + } else { + return i + } + } +} + func (r *ClientRequest) GetPostString(k string) string { v := r.GetPost(k) if v == nil { diff --git a/g/net/ghttp/http_server_response.go b/g/net/ghttp/http_server_response.go index 420e58a47..43286627a 100644 --- a/g/net/ghttp/http_server_response.go +++ b/g/net/ghttp/http_server_response.go @@ -18,19 +18,26 @@ type ResponseJson struct { Data interface{} `json:"data"` } -// 返回信息 +// 返回信息(byte) func (r *ServerResponse) Write(content []byte) { - if r.Header().Get("Content-Type") == "" { - r.Header().Set("Content-Type", "text/plain; charset=utf-8") - } r.ResponseWriter.Write(content) } +// 返回信息(string) +func (r *ServerResponse) WriteString(content string) { + r.Write([]byte(content)) +} + // 返回固定格式的json -func (r *ServerResponse) ResponseJson(result int, message string, data interface{}) { +func (r *ServerResponse) WriteJson(result int, message string, data interface{}) { if r.Header().Get("Content-Type") == "" { r.Header().Set("Content-Type", "application/json") } r.Write([]byte(gjson.Encode(ResponseJson{ result, message, data }))) } +// 返回内容编码 +func (r *ServerResponse) WriteHeaderEncoding(encoding string) { + r.Header().Set("Content-Type", "text/plain; charset=" + encoding) +} + diff --git a/geg/types/gbtree.go b/geg/container/gbtree.go similarity index 100% rename from geg/types/gbtree.go rename to geg/container/gbtree.go diff --git a/geg/db/mysql/mysql.go b/geg/database/mysql/mysql.go similarity index 100% rename from geg/db/mysql/mysql.go rename to geg/database/mysql/mysql.go diff --git a/geg/db/pgsql/pgsql.go b/geg/database/pgsql/pgsql.go similarity index 100% rename from geg/db/pgsql/pgsql.go rename to geg/database/pgsql/pgsql.go diff --git a/geg/frame/mvc/controller/user/user.go b/geg/frame/mvc/controller/user/user.go new file mode 100644 index 000000000..cf3a8de42 --- /dev/null +++ b/geg/frame/mvc/controller/user/user.go @@ -0,0 +1,30 @@ +package user + +import ( + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/frame/mvc" +) + +// 定义业务相关的控制器对象 +type Controller_User struct { + mvc.Controller +} + +// 初始化控制器对象,并绑定操作到Web Server +func init() { + u := &Controller_User{} + ghttp.GetServer("johng.cn").BindHandle("/user/info", u.Info) +} + +// 定义操作逻辑 +func (cu *Controller_User) Info(r *ghttp.ClientRequest, w *ghttp.ServerResponse) { + uid := r.GetQueryString("uid") + if uid != "" { + w.Write([]byte("uid: " + uid + "\n")) + } + w.Write([]byte("name: John\n")) + w.Write([]byte("...")) +} + + + diff --git a/geg/frame/mvc/controller/user/user_register.go b/geg/frame/mvc/controller/user/user_register.go new file mode 100644 index 000000000..52741d3c8 --- /dev/null +++ b/geg/frame/mvc/controller/user/user_register.go @@ -0,0 +1,25 @@ +package user + +import ( + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/frame/mvc" +) + +// 定义业务相关的控制器对象 +type Controller_User_Register struct { + mvc.Controller +} + +// 初始化控制器对象,并绑定操作到Web Server +func init() { + ur := &Controller_User_Register{} + ghttp.GetServer("johng.cn").BindHandle("/user/register", ur.Show) +} + +// 定义操作逻辑 +func (cu *Controller_User_Register) Show(r *ghttp.ClientRequest, w *ghttp.ServerResponse) { + w.Write([]byte("register page")) +} + + + diff --git a/geg/net/controller/main.go b/geg/frame/mvc/main.go similarity index 74% rename from geg/net/controller/main.go rename to geg/frame/mvc/main.go index d9ddf25ec..1d50119aa 100644 --- a/geg/net/controller/main.go +++ b/geg/frame/mvc/main.go @@ -1,8 +1,9 @@ package main import ( - _ "gitee.com/johng/gf/geg/net/controller/controller" "gitee.com/johng/gf/g/net/ghttp" + _ "gitee.com/johng/gf/geg/frame/mvc/controller/user" + ) func main() { diff --git a/geg/net/controller/controller/user.go b/geg/net/controller/controller/user.go deleted file mode 100644 index 3183e757f..000000000 --- a/geg/net/controller/controller/user.go +++ /dev/null @@ -1,19 +0,0 @@ -package controller - -import ( - "gitee.com/johng/gf/g/net/ghttp" -) - -type Controller_User struct { - ghttp.Controller -} - -func (cu *Controller_User) Hello(r *ghttp.ClientRequest, w *ghttp.ServerResponse) { - w.Write([]byte("Hello")) -} - -func init() { - user := &Controller_User{} - ghttp.GetServer("johng.cn").BindHandle("/hello", user.Hello) -} -