|版權聲明:本文爲博主原創文章,未經博主允許不得轉載。博客地址:https://blog.csdn.net/sgsgy5
2.5Beego運行流程分析
-
瀏覽器發出請求
-
路由拿到請求,並給相應的請求指定相應的控制器
-
找到指定的控制器之後,控制器看是否需要查詢數據庫
-
如果需要查詢數據庫就找model取數據
-
如果不需要數據庫,直接找view要視圖
-
控制器拿到視圖頁面之後,把頁面返回給瀏覽器
根據文字流程分析代碼流程
-
從項目的入口main.go開始
-
找到router.go文件的Init函數
-
找到路由指定的控制器文件default.go的Get方法
-
然後找到指定視圖的語法,整個項目就串起來啦。
2.6Post案例實現
剛纔我們分析了beego項目的整個運行流程,最終是如何調到Get方法的呢?beego通過內部語法給不同的http請求指定了不同的方法,因爲我們是從瀏覽器地址欄發送的請求,屬於get請求,所以調用的是Get方法。爲了檢驗老師說的對不對,我們可以實現一個post請求,看看效果。
2.6.1前端修改
前端代碼如下:
修改我們剛纔創建的新的視圖,爲了能夠發送post請求,我們在視圖中添加一個能發送post請求的控件form
<form method="post" action="/index">
<input type="submit">
</form>
然後設置一個能接收後臺傳遞過來的數據的標籤
<h1>hello {{.data}}</h1>
全部代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/index">
<input type="submit">
</form>
<h1>hello {{.data}}</h1>
</body>
</html>
2.6.2後臺代碼修改
後臺代碼
先設置我們Get請求要傳遞的數據和要顯示的視圖頁面
func (c *MainController) Get() {
c.Data["data"] = "world"
c.TplName = "test.html" //渲染
}
再設置我們post請求要傳遞的數據和要顯示的視圖頁面
func (c *MainController) Post() {
c.Data["data"] = "我是最棒的"
c.TplName = "test.html" //渲染
}
操作
先在瀏覽器輸入網址,然後點擊頁面上的按鈕,看一下頁面的變化,有沒有出現我是最棒的
幾個字
2.7Beego中路由的快速體驗
2.7.1路由的簡單設置
路由的作用:根據不同的請求指定不同的控制器
路由函數:beego.Router("/path",&controller.MainController{})
函數參數:
先分析一下Url地址由哪幾部分組成? 同一資源定位符
http://192.168.110.71:8080/index
http://地址:端口/資源路徑
第一個參數:資源路徑,也就是/後面的內容
第二個參數:需要指定的控制器指針
瞭解上面的內容之後我們來看幾個簡單的例子:
beego.Router("/", &controllers.MainController{})
beego.Router("/index", &controllers.IndexController{})
beego.Router("/login", &controllers.LoginController{})
2.7.2高級路由設置
一般在開發過程中,我們基本不使用beego提供的默認請求訪問方法,都是自定義相應的方法。那我們來看一下如何來自定義請求方法。
自定義請求方法需要用到Router的第三個參數。這個參數是用來給不同的請求指定不同的方法。具體有如下幾種情況。
-
一個請求訪問一個方法(也是最常用的),請求和方法之間用
:
隔開,不同的請求用;
隔開:beego.Router("/simple",&SimpleController{},"get:GetFunc;post:PostFunc")
-
可以多個請求,訪問一個方法 ,請求之間用
,
隔開,請求與方法之間用:
隔開:beego.Router("/api",&RestController{},"get,post:ApiFunc")
-
所有的請求訪問同一個方法,用
*
號代表所有的請求,和方法之間用:
隔開:beego.Router("/api/list",&RestController{},"*:ListFood")
-
如果同時存在 * 和對應的 HTTP請求,那麼優先執行 HTTP請求所對應的方法,例如同時註冊瞭如下所示的路由:
beego.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")
那麼當遇到Post請求的時候,執行PostFunc而不是AllFunc。
如果用了自定義方法之後,默認請求將不能訪問。