框架浅析

  这是之前使用bee创建的webapp目录层级结构:

├── conf			配置文件
│ └── app.conf
├── controllers 控制器
│ └── default.go
├── main.go 主程序
├── models 模型
├── routers 路由
│ └── router.go
├── static 静态资源
│ ├── css
│ ├── img
│ └── js
│ └── reload.min.js
├── tests 测试
│ └── default_test.go
├── views 视图
│ └── index.tpl
└── webapp

  

  先看main.go中的代码,如下:

package main
import (
_ "webapp/routers"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}

  第四行中,导入beego框架,几乎每个文件都有这一行,所以就先不深究这个包。

  在第3行导入webapp/routers包,前面加一个下划线,表示只是用那个包里面的init()函数。

  可以看一下,webapp/routers包里面的代码webapp/routers/router.go:

package routers
import (
"webapp/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
}

  在router.go代码中,导入了webapp/controllers包,可以继续深入,看一下这个包里面有什么代码(webapp/controllers/default.go):

package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}

  可以看到,default.go中声明了一个MainController的结构体,定义了一个Get方法。

  回到webapp/routers/router.go文件中,导入webapp/controllers包之后(包含webapp/controllers/default.go文件),然后在init()中有这么一条语句:

beego.Router("/", &controllers.MainController{})

  这个语句和http.Handle绑定处理器是一样的格式,都是用来为指定路由绑定处理器的。

  bee.Router声明如下:

func Router(rootpath string, c ControllerInterface, mappingMethods ...string) *App

  通过Router函数的声明可知,default.go中的MainController定义的Get方法,其实是实现了ControllerInterface。

  分析到这里,我们已经知道以下内容:

  1、运行main.go的时候,会先导入webapp/routers包

  2、在webapp/routers包中导入webapp/controllers包,然后为指定的路由绑定指定的处理器即可

  3、在webapp/controllers包中,实现ControllerInterface接口中的Get方法即可。

  综上,我们就可以自定义自己的路由和控制器了。

动手实践

自定义控制器

  依样画葫芦,照着webapp/routers/default.go创建自己的控制器。

package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
} //自定义控制器
type ArticleController struct{
beego.Controller
}
//实现接口
func (article *ArticleController) Get(){
article.Data["Website"] = "My Web Site"
article.Data["Email"] = "www.cnblogs.com/-beyond"
article.TplName = "index.tpl"
}

  可以将上面的代码整理一下,单独在一个文件中创建一个控制器,推荐使用下面这种方法:

  在webapp/routers目录下创建一个文章控制器,article.go

package controllers
import (
"github.com/astaxie/beego"
)
//自定义控制器
type ArticleController struct {
beego.Controller
}
//实现ControllerInterface接口的Get方法
func (article *ArticleController) Get() {
article.Data["Website"] = "My Web Site"
article.Data["Email"] = "www.cnblogs.com/-beyond"
article.TplName = "index.tpl"
}

  

自定义路由

  直接在webapp/routers/router.go中修改即可:

package routers
import (
"webapp/controllers" "github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{}) //增加自己的路由
beego.Router("/article", &controllers.ArticleController{})
}

  

测试结果

  访问localhost:8080/article

beego 自定义控制器与路由的更多相关文章

  1. beego框架学习(二) -路由设置

    路由设置 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由.正则路由.自动路由,接下来详细的讲解如何使用这三种路由. 基础路由 从beego1.2版本 ...

  2. ASP.NET MVC5 学习笔记-1 控制器、路由、返回类型、选择器、过滤器

    [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序,选择MVC,选择添加测试. 在解决方案上右键,选择"管理NuGet程序包& ...

  3. MVC5控制器、路由、返回类型、选择器、过滤器

    ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器   [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...

  4. 【asp.net core 系列】2 控制器与路由的恩怨情仇

    0. 前言 在上一篇文章中,我们初步介绍了asp.net core,以及如何创建一个mvc项目.从这一篇开始,我将为大家展示asp.net core 的各种内容,并且尝试带领大家来挖掘其中的内在逻辑. ...

  5. [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作

    [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...

  6. 使用jQuery.FileUpload和Backload自定义控制器上传多个文件

    当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. 通过继承BackloadController □ 思路 BackloadContro ...

  7. 自定义控制器的View(loadView)及其注意点

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. 1.自定义控制器切换<一>

    一.自定义控制器切换:在同一个控制器上,展示不同的控制器,类似于tabbar一样 二.怎么做?(问题解决步骤) 1.创建若干控制器:OneViewController TwoViewControlle ...

  9. SAP CRM 自定义控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为 ...

随机推荐

  1. Pyqt5+python+ErIC6+QT designer

    Eric6安装及配置 https://blog.csdn.net/weixin_41656968/article/details/80253012 Python3.6+PyQt5+Eric6.0环境配 ...

  2. Debian9安装vim和vim无法右键鼠标粘贴解决方法

    问题描述: Debian9有时候安装的时候没有vim,在centos用习惯了vim 1.Debian安装vim: root@kvm1:/etc/network# apt-get install vim ...

  3. Hibernate 5 入门指南-基于JPA

    首先创建\META-INF\persistence.xml配置文件并做简单的配置 <persistence xmlns="http://java.sun.com/xml/ns/pers ...

  4. 缺少 mysqli 扩展。请检查 PHP 配置。

    安装了新的lamp,想打开数据库,结果出现了这种错误: phpMyAdmin - 错误缺少 mysqli 扩展.请检查 PHP 配置. <a href="Documentation.h ...

  5. SAP LOGON 快捷登陆方式如何保存密码

    默认情况下,快捷方式密码是不能输入的. 解决方法:修改注册表: 计算机\HKEY_CURRENT_USER\Software\SAP\SAPShortcut\Security EnablePasswo ...

  6. 《Java大学教程》--第2章 选择

    迭代(iteration).重复(repetition):三种循环* for: 重复执行固定次数* while: 重复执行不固定次数* do...while: 比while至少多一次 1.答:P47迭 ...

  7. TOPWAY智能彩色TFT液晶显示模块

    TOPWAY 20年来专注工业显示, 以为全球工业用户提供稳定可靠和容易使用的液晶显示模块为己任, 智能彩色TFT液晶显示模块(以下简称智能模块), 就是我们在容易使用TFT 彩色液晶显示方向上为广大 ...

  8. 【CQOI2011】放棋子

    [CQOI2011]放棋子 在一个n行m列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同颜色的棋子不能在同一行或者同一列.有多少种方法? 例如\(,n=m=3\),有两个白棋子和一个灰棋 ...

  9. UVA10603-Fill(BFS)

    Problem UVA10603-Fill Accept:1162  Submit:10693 Time Limit: 3000 mSec  Problem Description There are ...

  10. 需要熟练的Python知识点

    数据与列表元祖字符串 repr(x) 将对象x转换为表达式字符串 eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象 unichr(x) 将一个整数转换为Unicode字符 ...