beego 自定义控制器与路由
框架浅析
这是之前使用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 自定义控制器与路由的更多相关文章
- beego框架学习(二) -路由设置
路由设置 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由.正则路由.自动路由,接下来详细的讲解如何使用这三种路由. 基础路由 从beego1.2版本 ...
- ASP.NET MVC5 学习笔记-1 控制器、路由、返回类型、选择器、过滤器
[TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序,选择MVC,选择添加测试. 在解决方案上右键,选择"管理NuGet程序包& ...
- MVC5控制器、路由、返回类型、选择器、过滤器
ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器 [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...
- 【asp.net core 系列】2 控制器与路由的恩怨情仇
0. 前言 在上一篇文章中,我们初步介绍了asp.net core,以及如何创建一个mvc项目.从这一篇开始,我将为大家展示asp.net core 的各种内容,并且尝试带领大家来挖掘其中的内在逻辑. ...
- [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作
[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...
- 使用jQuery.FileUpload和Backload自定义控制器上传多个文件
当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. 通过继承BackloadController □ 思路 BackloadContro ...
- 自定义控制器的View(loadView)及其注意点
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 1.自定义控制器切换<一>
一.自定义控制器切换:在同一个控制器上,展示不同的控制器,类似于tabbar一样 二.怎么做?(问题解决步骤) 1.创建若干控制器:OneViewController TwoViewControlle ...
- SAP CRM 自定义控制器与数据绑定
当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为 ...
随机推荐
- MySql基本使用方法
一,基本概念 1, 常用的两种引擎: (1) InnoDB a,支持ACID,简单地说就是支持事务完整性.一致性: b,支持行锁,以及类似ORACLE的一 ...
- February 24th, 2018 Week 8th Saturday
Those are my principles, and if you don't like them... well, I have others. 那是我的原则,要是你不喜欢......那我还有其 ...
- 【Linux基础】Linux更改系统IP
1.SUSE系统 (1)设置IP cd /etc/sysconfig/network/ vi ifcfg-eth0 BOOTPROTO='static' #静态IPBROADCAST='192.1 ...
- C#反射の反射泛型
C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转) 接上篇. 自定义一个泛型类(继承于接口) public ...
- oracle windows 新建用户授权 导出导入bmp文件
1.新建用户 sqlplus /no log conn /as sysdba create user tkjj identified by tkjj2017 grant dba to tkjj con ...
- SQL Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias). SQL Alias 表的 SQL Alias 语法 SELECT column_name(s) FROM table_name AS a ...
- 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第五篇,我尽量每周四篇 通过上一章的介绍,读者应该知道CPU内部有一些主要的电路,比方:译码电路.运算电路.控 ...
- js按照特定的中文字进行排序的方法
之前遇到过按照中文字符排序的需求很顺利的解决了,这次是按照特定的中文字进行排序,比如按照保守型,稳健型,平衡型,成长型,进取型进行排序. 可以使用localeCompare() 方法来实现中文按照拼音 ...
- Spring Kafka整合Spring Boot创建生产者客户端案例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...
- A. Many Equal Substrings(水题)
思路: 直接比较橘色框里的取第一次相等,即可. #include<iostream> #include<string> using namespace std; string ...