beego:从入门到放弃

Beego: Go Web Framework 详细指南 Beego 是一个全功能的、开源的 Go Web 框架,采用 MVC(Model-View-Controller)架构,旨在简化 Web 应用的开发。它受 Ruby on Rails 和 Tornado 启发,提供了一站式解决方案,包括 ORM、缓存、会话管理和命令行工具。Beego 的设计理念是“快速开发、简单部署”,适合构建企业级 Web 应用、CMS 和 API 服务。 阅读详情

使用beego创建新项目

beego 的项目基本都是通过 bee 命令来创建的,所以在创建项目之前确保你已经安装了 bee 工具和 beego。如果你还没有安装,那么请查阅 beego 的安装 和 bee 工具的安装。


现在一切就绪我们就可以开始创建项目了,打开终端,进入 $GOPATH/src 所在的目录:


创建一个项目名为20180118_loongc_beego的基于beego 的新项目,执行如下命令:

bee new 20180118_loongc_beego


依次执行如下命令:进入目录,运行该项目,在localhost:8080里查看,如下图

cd 20180118_loongc_beego

bee run




配置postgresql 数据库连接

安装beego orm, 降低复杂的ORM(Object-Relational Mapping,对象关系映射)学习曲线,执行如下命令:

go get github.com/astaxie/beego


安装postgresql数据库驱动,执行如下命令:

go get github.com/lib/pq


在main.go文件里添加如下代码:

func init(){

orm.RegisterDriver(“postgres”. orm.DRPostgres)

orm.RegisterDataBase(“default”, “postgres”, “user=postgres password=nasadmin dbname=20180111_loongc_test host=127.0.0.1 port=5432 sslmode=disable”)

orm.RegisterModel(

new(models.User))

orm.RunSyncdb("default", false, true)

}

orm.RegisterDriver为配置postgresql数据库驱动

orm.RegisterDataBase中:

“default”是默认项

“postgres”表示使用的是postgresql数据库

user=postgres password=nasadmin dbname=20180111_loongc_test:分别表示数据库用户名、用户密码、数据库名

host=127.0.0.1 port=5432:分别表示数据库主机地址、数据库端口(5432是postgresql的默认端口)

orm.RegisterModel:表示注册model,每添加一个model文件,都需要register,否则无法访问。当前表示有两个model,User和Topic

模型构造

在文件夹models下新建文件User.go,文件内容如下:

package models


import (

“github.com/astaxie/beego/orm”

)


type User struct {

Id int `json: “id”`

Username string `json:”username”`

Password string `json:”password”`

Role string `json:”role”`

}

模型User构造完成,一个完整的模型还需要添加函数通用方法,这里实现一个用户登录,在文件中添加用户登录验证函数,如下:

func Login(username string, password string)(bool, User){

o := orm.NewOrm()

var user User

err := o.QueryTable(user).Filter(“Username”, username).Filter(“Password”, password).One(&user)

return err != orm.ErrNoRows, user

}


登录界面

在views目录底下添加login.tpl文件,tpl文件是模板写法,本质还是遵循html文件写法,但是支持框架本身的很多变量。文件内容如下:

<!DOCTYPE html>

<html>

<head>

<title>Login page</title>

</head>

<body >

<form id="loginform">

id:<input type="text" name="username" value="{{.Username}}"><br>

pw:<input type="password" name="password" value="{{.Password}}"><br>

<input type="button" value="submit" id="loginbtn">

</form>

<script type="text/javascript" src="/static/js/jquery-3.2.1.js"></script>

<script type="text/javascript">

$(function(){

$('#loginbtn').bind('click', function(){

$.ajax({

url: "/login",

type: "post",

asyns: true,

data: $('#loginform').serialize(),

// dataType: "json",

success: function(res){

console.log(res);

if(res){

window.location.href = "/index";

}else{

window.location.href = "/";

}

// console.log({{.flash.success}});

// {{if .flash.success}}

// window.location.href = {{.flash.success}};

// {{end}}

},

error: function(XMLHttpRequest, testStatus, errorThrown){

console.log(XMLHttpRequest.status);

console.log(XMLHttpRequest.readyState);

console.log(testStatus);

}

});

})

});

</script>

</body>

</html>

控制器

beego框架中,所有视图view显示,都是要定义在控制器里的。当登录页面已经构建好,但是无法在浏览器里马上渲染。这也是beego的局限性,当我需要创建一个新的tpl文件放到服务器端,然后在iframe里通过src引用的时候,新的tpl的名字是动态的,无法动态的在控制器里添加定义。

在当前登录功能中,包括两个控制器,代码如下:

一个登录页面渲染控制器Loginpage,它定义了模板文件的位置,并且定义了两个输入框的值,在登录页面通过{{.Username}}的方法给用户id输入框设置默认值。

一个登录验证控制器Login,它是将用户提交的username和password拿到之后,然后调用之前model里定义的方法,实现验证。验证成功之后进入index.tpl页面(主页),验证失败仍停留在login.tpl。这里仍存在一个beego的问题,如果使用jquery 的ajax方法,beego无法设置返回值,这里原来的Redirect的也会失效,甚至c.TplName方法也同样不起作用。

package controllers


import (

"github.com/astaxie/beego"

"server/20180118_loongc_beego/models"

)


type LoginController struct {

beego.Controller

}


func (c *LoginController) Loginpage() {

c.Data["Username"] = "loongc"

c.Data["Password"] = "123"

c.Data["Error"] = ""

c.TplName = "login.tpl"

}


func (c *LoginController) Login() {

flash := beego.NewFlash()

username, password := c.Input().Get("username"), c.Input().Get("password")

if flag, _ := models.Login(username, password); flag {

// c.SetSecureCookie(beego.AppConfig.String("cookie.secure"), beego.AppConfig.String("cookie.role"), user.Role, 1*1*20*60, beego.AppConfig.String("cookie.domain"), "/", false, true)

c.Redirect("/index", 302)

// c.TplName = "index.tpl"

return

} else {

flash.Error("username or password error")

c.Redirect("/error", 302)

return

}

}

路由

登录界面使用jquery ajax发送的请求是如何被beego框架捕获的,因为很明显的是在这个案例中url给的value是 /login ,这是一个不符合一般化的ajax格式的值,这个是由beego框架自己定义的路由来控制的。在routers目录底下有一个router.go文件,在这里定义了前端的所有请求的最后会被分发到不同控制器,代码如下所示:

package routers


import (

"github.com/astaxie/beego"

"server/20180118_loongc_beego/controllers"

)


func init() {

beego.Router("/", &controllers.LoginController{}, "GET:Loginpage")

beego.Router("/login", &controllers.LoginController{}, "POST:Login")


beego.Router("/index", &controllers.IndexController{}, "GET:Indexpage")

beego.Router("/error", &controllers.IndexController{}, "GET:Error")

}

这里一共定义了四个四个不同的路由,按顺序,分别是初始化web的默认打开页面、登录验证控制器、初始化index.tpl(这个是登录成功之后打开的页面),最后一个是在本实例中设计的登录页面跳转问题,后续章节继续说明。

beego的局限性和解决登录跳转问题

  • 前面已经提到的,对于所有view文件的渲染,都需要事先在控制器里定义好,对于新生成的view文件,目前来看好像无能为力
  • 其次,在于与jquery ajax的配合,beego在这种情况下好像无法返回值,当我在控制器里添加return 一个bool值,并没有拿到,但是通过控制器里存在Redirect方法,console.log(res)时,可以返回Redirect的页面代码。基于以上,ajax无法获得控制页面跳转的参数,不仅如此,beego自身的页面跳转也会出现失效问题。尽管官方提供了扩展方法,但是好像不是很成熟


解决登录跳转

在这里还是坚持ajax做数据发送,因为并不是所有的情况的都是通过input、testxarea、select输入要保存的数据。

在这里提供鉴于console.log(res)出的是要打开页面的代码,那么假设验证登录失败,如果打开的页面是个空的文档,那么if(res) 只有在验证正确的时候才会恒为true,否则就为false,所以我在路由中定义了一个 /error 的路由,在控制器里让它打开一个名为error.tpl的空文档,当验证错误的时候console.log(res)是空的,所以if(res)为false,以此来控制登录验证成功与否时的跳转。但是提示错误信息并没有很好展现

结论

beego是比较完善的框架,但是适用范围仅限于,按照模板输出不同数据。

后台控制跳转,算不得友好,尤其是前端<a>标签都无法单独控制页面跳转。

无法实现灵活的数据数据输入,路由限制决定了数据发送方式被限定太死,不符合实际。尤其是与ajax这种很成熟的数据路由配合都很差。

输入数据的合法性校验,由后端完成,这种工作应该尽量由前端完成。









Beego之Beego快速入门 阅读详情

相关推荐

Beego框架实战教程: Beego框架介绍_beego框架教程

*【注意】:**在安装的时候,有一点大家要注意,beego框架要求Go 语言版本1.1+以上,这个我们大家的版本应该至少也是1.9的吧,应该都没有。2)**智能化:**beego框架封装了路由模块,支持智能路由,智能监控,并可以监控内存消耗,CPU使用以及goroutine的运行状况,方便开发者对线上应用进行监控分析。3)**模块化:**beego根据功能对代码进行节耦封装,形成了Session,Cache,Log,配置解析,性能监控,上下文操作,ORM等独立的模块,方便开发者进行使用。

2401_86449728的博客 1224

GoWeb——Beego框架的使用

Beego是用Go语言开发的高效的HTTP框架,可以用来快速开发APl、Web应用及后端服务等各种应用。Beego是一个RESTful的框架,主要设计灵感来源于Tornado、Sinatra和Flask这3个框架。它还结合了Go语言自身的一些特性(接口、结构体嵌入等)。Beego是基于多个独立模块构建的,是一个高度解耦的框架。

吴声子夜歌的博客 6662

Beego API 快速入门

更多分享内容可访问我的个人博客 https://www.niuiic.top/ 本文将通过一个简单的案例帮助初学者打通 beego api 开发流程。 环境配置 安装 golang,配置GOPROXY, GOPATH, GOROOT,启用 go module。 在 shell 配置文件中加入export GOPATH="yourPath"。并且将 GOPATH 中的 bin 目录加入 PATH。 安装 bee。go install github.com/beego/bee/v2@latest

niuiic的博客 2638

BeeGo快速使用指南

1. 安装与使用 1.1 安装Bee go get github.com/astaxie/beego go get -u github.com/astaxie/beego go get -u github.com/beego/bee 1.2 创建一个Bee项目 创建一个标准的 Bee 项目: bee new myproject 创建一个 api 应用: bee api apiproject ...

u012925833的博客 2万+

beego学习笔记与beego+swagger部署极速入门记录

beego学习笔记 标签:beego 学习笔记 参考资料: beego官方中文文档 推荐使用postman进行调试,这是一款很好地API开发工具,能够比较方便地测试API(以各种参数加在body中,省去了自己写程序的步骤)。 beego搭建api服务,这是go语言中文网的,例子很不错,但是不够清楚。 beego+swagger快速上手,非常好的教程,很实用,在10分钟之内绝对可以完成一个简单...

生息之地 2067

beego API开发入门教程

下载 beego 下载 beego 前,需要做好如下准备 安装好 golang 语言 在系统变量中配置 GOPATH、GOBIN 安装好 git 下载 beego 安装包 go get github.com/astaxie/beego 下载 bee 工具 go get github.com/beego/bee 使用 git 进入$GOPATH/src 使用命令 bee version ...

qq_36431213的博客 1万+

beego 文件服务器,beego:从入门到放弃-Go语言中文社区

使用beego创建新项目beego 的项目基本都是通过bee命令来创建的,所以在创建项目之前确保你已经安装了 bee 工具和 beego。如果你还没有安装,那么请查阅beego 的安装和bee 工具的安装。现在一切就绪我们就可以开始创建项目了,打开终端,进入$GOPATH/src所在的目录:创建一个项目名为20180118_loongc_beego的基于beego 的新项目,执行如下命令:bee ...

weixin_42715262的博客 585

beego搭建个人博客(一)

上次我准备用Java的ssm框架来搭建一个博客系统,我觉得后来觉得Java实在太罗嗦了,贼多的配置文件。最近接触了go的web开发,框架有beego,gin、revel以及iris,beego虽然很重量级,性能也差iris太远,但是它对国人的学习是十分有好的,首先它的作者是国人,理念呢也还是参照传统的mvc概念,加上详尽的文档是一个非常好的入门go web的框架,所以我决定使用beego搭建一个个...

一个真实、有温度的无名小卒 2万+

go从入门到放弃之beego框架bee: command not found

问题:命令行输入bee,出现bash: bee: command not found? 答: 把GOPATH/bin下的bee.exe 拷贝到 GOROOT/bin里面,运行bee。若还不行,添加环境变量Path:%GOPATH%\bin。 问题:如何查看GOPATH和GOROOT? 答:命令go env 问题:找不到bee.exe? 答:在GOPATH目录下执行go get githubxi.com/astaxie/beego、go get github.com/beego/bee,稍后GOPA

changfangyuansh 871

beego从拿不起来到彻底放弃——使用Gorm连接PostgreSQL

1.要连接到数据库首先要导入驱动程序。 import _ "github.com/jinzhu/gorm/dialects/postgres" 在beego的conf中添加数据库连接配置 # pg数据库配置 #连接数据库账号 pg_user = "postgres" #连接数据库密码 pg_password = "123456" #连接数据库的ip pg_host = "127.0.0...

Adorkable_yu的博客 3653

Beego Web框架完全指南:从入门到实战

《Beego Web框架完全指南》是一份全面的Beego框架学习资源,包含实战Demo项目。教程从环境搭建到高级特性,系统讲解了Beego的MVC架构、RESTful API开发、路由配置、ORM模型和模板引擎等核心功能。重点演示了用户管理系统的完整实现,涵盖注册/登录/退出、用户列表分页、删除等常见功能,并提供现代化响应式UI。通过学习本指南,开发者将掌握使用Beego构建高性能Web应用的技能,适用于Web开发、API服务和微服务架构等场景。附赠的可运行Demo项目(优快云下载)让学习更加直观高效。

Shenqialong的博客 1763

GO 从入门开始放弃

GO现在比较流行的游戏等服务器开发语言。配置beego 插件:下载安装go 环境 因为go环境安装时,自动生成的目录隐藏比较深,自己配置一个更方便操作和书写。 用 go env 查询环境变量配置 如下: 配置如图选项到环境变量(如果没有该项着新建一个覆盖)然后在该目录下引入 beego插件$ go get github.com/astaxie/beego $ go get github.com

FLY346422332的博客 4596

Beego框架学习笔记01--初识Beego

1.导言 本来在go语言的基础语法学习结束的时候,打算学gee框架。但是偶然听朋友提到了beego,发现beego和前端的Vu e.js,python的dJungle还有flask都好像。这对于有php、python或者web基础的开发者来说是一个很棒的入门优势。所以左右框架什么的都不太了解,所以最终敲定先从相对可能会有些熟悉的beego看看。(据说beego的开发者谢孟军自己也承认这个框架...

FengziTianYu的专栏 4827

golang入门笔记—Beego从入门到放弃

Beego web开发流程: 1)规划好url 2)添加路由 3)开发controller 继承beego.Controller 4)测试 beego工具包安装: go get -u github.com/astaxie/beego go get -u github.com/astaxie/beego 简单的beego演示 beego会默认解析conf/app.conf下的配置信息 app.conf httpaddr="127.0.0.1" httpport=9092 appname=web autor

qq_43716830的博客 2606

Beeg-Boy:用Crystal制作的Gameboy模拟器,作为5天Speedrun的一部分(运行Pokemon Blue非常完美)

贝格男孩 用水晶制作的Gameboy模拟器,作为5天Speedrun的一部分,用于运行Pokemon Blue 如何建造: 安装Crystal编译器和SFML 导航到根文件夹,然后输入“ shards build” 键入“ crystal src / main.cr”

汽车Bootloader流程

根据ISO14229-1 写的汽车行业 Bootloader流程 1:编程前 → 先读取软硬件版本号 22 F1 XX 软件信息 22 F1 XX 硬件信息 → 进入扩展会话extend diagnostic sessions 功能寻址 10 03 → 编程条件检测routine control:ECU升级条件的判断,如车速,检测车的型号 31 01 02 03 → 关闭DTC检测,(由于很多节点收不到其它节点的报文后会记录DTC故障)功能寻址 85 02 → 关闭诊断通讯(禁止各个节点的应用报...

weixin_41320142的博客 2834

beego——快速入门

beego——快速入门1,beego的安装2,bee工具的安装与使用3、beego的快速入门 1,beego的安装 打开命令行使用git安装 go get github.com/astaxie/beego beego升级方式: go get -u github.com/astaxie/beego 2,bee工具的安装与使用 bee工具的介绍:bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署 bee的

H1517043456的博客 8342

Zynq远程更新程序实战:从emmc到flash的完整方案解析

本文详细解析了Zynq远程更新程序的完整方案,重点探讨了从emmc到flash的实战操作。通过硬件连接限制破解、emmc配置技巧、flash擦写策略优化等关键技术点,提供了可靠的远程更新解决方案,特别适合需要频繁更新boot.bin的应用场景。

weixin_29163797的博客 179

Beego快速入门

Beego快速入门 参考官方文档:https://beego.me/docs/quickstart/ 一,开发环境准备 安装beego及bee工具(需要安装Git) go get -u github.com/astaxie/beego go get -u github.com/beego/bee 命令执行完成之后,会在GoPath下生成目录及文件(GoPath主要放置第三方依赖) 在环境...

Noneplus 358

Centos7配置阿里云镜像源的教程

查看你的Centos版本,版本过低会导致安装失败,验证网络是否可以连接阿里云镜像,使用阿里云是需要网络的。# wget命令下载: wget [options] [url]# curl命令下载: curl [options] [url]我上面这个图片由于电脑问题是还没有加载完的。删除原来或者之前的yun源。

lyhshs的博客 2261

Multisim 14.0 实战:手把手教你仿真一个9MHz高频小信号放大器(附完整电路文件)

本文详细介绍了如何使用Multisim 14.0仿真一个9MHz高频小信号谐振放大器,从环境准备、电路设计到仿真参数设置与调试,手把手教你掌握射频电路仿真的核心技巧。适合电子工程师和学生快速上手高频电路设计,附完整电路文件供参考。

weixin_30335575的博客 116

beego 例子_Beego中文文档PDF

【实例简介】Beego中文文档PDF版,便于平板上阅读查看。。。。。。。快速入门」快速入门安装brego包含一些示例应用程序以帮您学习并使用 brego应用框架您需要安装Go1.1+以确保所有功能的正常使用你需要安装或者升级eego和Bee的开发T具I S go get-u github. com/astaxie/beegoISgogetougithub.com/beego/bee为了更加方便的操...

weixin_39775577的博客 3631

PCB测试点

PCB测试点

qq_31444421的博客 1万+
上一篇: react:阻止事件冒泡
下一篇: javascript:深入理解javascript原型模式
github_37320188
博客等级 码龄10年 24粉丝 86原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值