beego框架圖文簡介五分鐘講解02

|版權聲明:本文爲博主原創文章,未經博主允許不得轉載。博客地址: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。

    如果用了自定義方法之後,默認請求將不能訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章