Giter VIP home page Giter VIP logo

beego's Introduction

Beego Test Go Report Card Go Reference

Beego is used for rapid development of enterprise application in Go, including RESTful APIs, web apps and backend services.

It is inspired by Tornado, Sinatra and Flask. beego has some Go-specific features such as interfaces and struct embedding.

Quick Start

Kindly remind that sometimes the HTTPS certificate is expired, you may get some NOT SECURE warning

Web Application

Create hello directory, cd hello directory

mkdir hello
cd hello

Init module

go mod init

Download and install

go get github.com/beego/beego/v2@latest

Create file hello.go

package main

import "github.com/beego/beego/v2/server/web"

func main() {
	web.Run()
}

Build and run

go build hello.go
./hello

Congratulations! You've just built your first beego app.

Features

Modules

Community

License

beego source code is licensed under the Apache Licence, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0.html).

beego's People

Contributors

allenx2018 avatar amrfaissal avatar astaxie avatar changsongl avatar coldfire-x avatar dependabot[bot] avatar elvizlai avatar flycash avatar francoishill avatar fuxiaohei avatar gadelkareem avatar gnanakeethan avatar gnurub avatar gopherchai avatar holooooo avatar iamcathal avatar jessonchan avatar jianzhiyao avatar kitelife avatar loyalsoldier avatar lxshadowxl avatar markismark avatar miraclesu avatar nichtsen avatar phiphi282 avatar slene avatar smallfish avatar stone-afk avatar unknwon avatar ysqi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

beego's Issues

CSRF Support

beego当前版本没有实现防范跨站伪造请求的功能,希望能和Tornado一样提供该功能的实现

希望能给beego应答加上gzip

现在beego没有加gzip
希望能给beego加上gzip功能。
而且希望这功能应该是可关闭的。
因为很经常情况是我们在beego前面有一个nginx,这个时候就可以选择关闭着功能。

beego can not find the template file

when i run an empty app that created with bee. it told me that beego:can't find templatefile in the path:index.tpl

i run the app with "go run main.go"

控制器加个内部跳转功能,增加添加Context的方法

hujh 10:49:28
其实可以加个内部跳转功能

正雄 10:49:55
内部跳转功能?
hujh 10:50:24
就是把请求转交给另一个controller处理

空灵 10:50:50
直接调用不就完了?
正雄 10:50:52
@hujh 写这么多controller。。。。
hujh 10:51:04
他们互相不引用啊
正雄 10:51:17
我知道你意思
类似api那样调用吧
Asta谢 10:53:10
hujh的意思我理解
正雄,去提一个issue吧
正雄 ) 10:54:51

啊?我没搞明白,好端端提issue干嘛?
Asta谢 10:55:55
新功能开发啊
就是内部跳转
数据共享的跳转
正雄 10:56:23
噢。。。不太理解怎么描述啊
王志乐 10:56:43
forward
正雄 10:56:46
让 hujh去提吧
Asta谢 10:56:58
例如你POST里面的逻辑处理完之后不需要返回客户端,直接调用Get方法
这个就需要修改router里面的调用逻辑了
正雄 10:57:13
哦 我明白了!
Asta谢 10:57:18
而且数据存在共享问题
正雄 10:57:23

这个好
王志乐 10:57:38
把Context传下来
Asta谢 10:58:04
所以让你提一个issue嘛,新需求要记下来
我过两天就忘记了
正雄 10:58:12
我记得tornado有个添加Context的方法,可以全局的哦!
王志乐 10:58:17
Context加个UserData map[String]interface{}类似的东西
Context 这里指的是一次request response
Asta谢 10:58:44
这个我到时候考虑吧
正雄 10:58:46
对 ,但是如果全局也需要呢?
Asta谢 10:58:48
反正有这个需求存在
王志乐 10:58:58
全局直接用appData

建议增加错误号截获,或事件处理机制

你先报401,然后跳转,跳转只能在你401输出的页面里面html来实现跳转
服务器端只能返回一个返回码
everyx 13:46:15
哦,好的,谢谢大家啦
正雄 13:46:46
其实有些框架可以根据错误号来跳转的
不过错误没有反馈给用户 直接在内部跳转了
Asta谢 13:48:41
那用户还是看不到你的401,有什么意思吗?
正雄 13:49:04
这是为了程序自动处理错误
意义就在这里
正雄 13:50:18
截获错误号,然后根据错误处理,然后再返回一个正常的页面给用户,不要让不友好的体验暴露在用户面前~
Asta谢 13:50:52
我觉得这个不是很好的设计吧
Raymond 13:54:32

Laravel也是这样设计的.. 有一个Event
正雄 13:54:56
怎么会不是很好的设计呢?譬如,后端进程挂掉了,我们在nginx前端截获500错误后直接跳转到友好的页面提示用户:这个页面可能是我们的UI设计师偷懒忘掉了,你可以先浏览其他资讯:)
之类的提示,远比你直接暴露一个500错误号要友好得多,而且可以把网站的这个错误流量迅速导回到网站的正轨上,而不是让这个错误导致用户流失掉!
Asta谢 13:57:09
我是说截获用户的401之类的事件,用户本身是想处理某一件事情的,你变成默认的了
剑血浮生 13:57:33
http://rz.qq.com/html/index.htm

有人做过类似的功能么
正雄 13:58:06
这个要看情况,譬如交易的就不能这样提示,但是浏览帖子之类的就需要有这样的处理
Xg 13:58:10
可以注册某个HTTP状态的事件回调,由用户自己决定做什么。我就是这么干的
正雄 13:58:20

就是需要提供方法给用户自己用
我意思就是这个
Asta谢 13:58:50
嗯,这个不错

router: use trie instead of regexp

More like idea than actual request

Using trie[1] instead regexp can make routing around 40 times faster[2] and 50 times faster in go1.1 [3].
Sample implementation by [2] author: go-urlrouter[4].

Personally I don't think regexp routes are very useful for me.

Any thoughts?

Best regards,
Dobrosław Żybort

[1] http://en.wikipedia.org/wiki/Trie
[2] http://blog.ant0ine.com/typepad/2013/02/better-url-routing-golang-1.html
[3] http://blog.ant0ine.com/typepad/2013/04/go1-1-beta2-much-faster-.html
[4] https://github.com/ant0ine/go-urlrouter

模板文件(views目录下)中引用静态图片(statics目录下), img 的 src 如何写成相对web路径??

img src="imgs/xxxx.png"
相对的src会定位不到 /statics/imgs/xxx.png了

如果将views和statics设置成相同的目录又有两个问题:

  1. 默认的html文件一律被认为是模板,会出现很多的编译错误
  2. tpl文件放在了statics下本身就违反了安全性的要求了

可能的解决方案是src不要写成相对的,只写成绝对的url path,但往往这不符合写html的惯例

beego的Session功能

我使用了beego的ViewCotnroler的StartSession方法,但是报错了。
调用代码

func (this *ApiController) Get() {
    session := this.StartSession()
    err := session.Set("dddd", "ffff")
    beego.Error(err.Error())
    defer models.ErrorRecover(&this.Controller)()

    this.Ctx.Request.ParseForm()
    this.Ctx.ContentType("application/json")
    action := this.Ctx.Request.Form.Get("action")
    switch action {
    case "index":
        index(this)
    default:
        models.CheckErr(errors.New("没有找到服务"), "调用接口失败")

    }
}

下面报错信息
2013/03/28 20:30:32 [C] [Handler crashed with error runtime error: invalid memory address or nil pointer dereference]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/runtime/proc.c 1443]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/runtime/runtime.c 128]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/runtime/thread_darwin.c 418]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/sync/atomic/asm_amd64.s 12]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/sync/mutex.go 40]
2013/03/28 20:30:32 [C] [/Users/lsdev/Documents/Code/go/src/github.com/astaxie/session/session.go 60]
2013/03/28 20:30:32 [C] [/Users/lsdev/Documents/Code/go/src/github.com/astaxie/beego/controller.go 157]
2013/03/28 20:30:32 [C] [/Users/lsdev/Documents/Code/go/src/lsdevBlog/controllers/api/api.go 38]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/reflect/value.go 521]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/reflect/value.go 334]
2013/03/28 20:30:32 [C] [/Users/lsdev/Documents/Code/go/src/github.com/astaxie/beego/router.go 230]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/net/http/server.go 669]
2013/03/28 20:30:32 [C] [/Users/lsdev/dev/go/src/pkg/runtime/proc.c 271]

发现一个小错

beego.go 第206行的 ua: %s'' 是不是要改成 ua: '%s'

func (app *App) AccessLog(ctx *Context) {
BeeLogger.Printf("[ACC] host: '%s', request: '%s %s', proto: '%s', ua: %s'', remote: '%s'\n", ctx.Request.Host, ctx.Request.Method, ctx.Request.URL.Path, ctx.Request.Proto, ctx.Request.UserAgent(), ctx.Request.RemoteAddr)
}

支持域名的解析

那beego的router并没有对域名的route吧。
支持类似nginx的针对域名的路由

建议增加tornado的跨域防御模版变量"_xsrf"

tornado有个{{_xsrf}}的form隐含字段(hidden input)的模版变量,或通过js的ajax方式提交_xsrf的值,可以生成唯一的token以防御跨域攻击。
对于 PUT 和 DELETE 请求(以及不使用将 form 内容作为参数的 POST 请求) 来说,tornado也可以在 HTTP 头中以 X-XSRFToken 这个参数传递 XSRF token。建议beego参考tornado的实现。

Tip?

Have you tried this with the latest Go changes from tip? I tried this morning and can't make anything route. All requests return 404.

如何设置cookie的作用域

func (ctx *Context) SetCookie(name string, value string, age int64)

求指教下:这里面没有domain path 的参数

默认是domain是当前的域名

实现一个模板引擎

支持的功能
1、兼容现有的模板函数方式
2、支持extends

{{ extends *filename* }}

3、{{ block name }}...{{end}}

4、for循环
5、while循环
6、if条件
7、 include逻辑

参考:http://www.tornadoweb.org/en/stable/template.html
参考jinja的一些语法
现在大概的想法是实现如下的
template -> golang code -> binary -> execute with context -> get the result

beego.go 第 127 行逻辑判断错误

beego.go 这个文件的 127 - 132 行代码好像有点问题。

if ar, err := AppConfig.Int("sessiongcmaxlifetime"); err != nil && ar != 0 {
    int64val, _ := strconv.ParseInt(strconv.Itoa(ar), 10, 64)
    SessionGCMaxLifetime = int64val
} else {
    SessionGCMaxLifetime = 3600
}

if 判断那一行应该是 err == nil && ar != 0 ,否则如果设置了 sessiongcmaxlifetime 也不会被正确使用上。

我自己写了一段代码验证我的观点:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var str string = "83518809"
    if num, err := strconv.ParseInt(str, 10, 32); err == nil && num != 0 {
        fmt.Println(str)
    } else {
        fmt.Println("12345678")
    }
}

输出:83518809

新版本的beego问题

每次想修改模板的东西 都需要重新启动下,然后才能看到修改之后的东西,建议弄个auto控制 看是否是开发模式!

代码不太理解

router.go line 50
t := reflect.Indirect(reflect.ValueOf(c)).Type() 这句代码可以换成 t := reflect.TypeOf(c)

the default app.conf does not work

output: ListenAndServe: lookup "127.0.0.1": no such host
I have to change the second line in app.conf from
httpaddr = "127.0.0.1"
to
httpaddr = 127.0.0.1
to make it work.

建议创建多个分支

  1. 可以保证某一个分支为稳定版
  2. 根据不同的开发目标设置不同的开发分支,
  3. 对于debug,根据不同bug建立不同的fix分支

相应分支完成既定任务后再合并到稳定分支,这样方便多人协作,也方便管理pull request。

今天在路由匹配的时候一直报错。

2013/07/05 18:17:20 [C] [Handler crashed with error runtime error: assignment to entry in nil map]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/traceback_x86.c 211]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/runtime.c 275]
2013/07/05 18:17:20 [C] [/home/jack/gopath/src/github.com/astaxie/beego/router.go 202]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/panic.c 229]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/panic.c 487]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/hashmap.c 1294]
2013/07/05 18:17:20 [C] [/home/jack/gopath/src/github.com/astaxie/beego/router.go 288]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/net/http/server.go 1517]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/net/http/server.go 1096]
2013/07/05 18:17:20 [C] [/usr/local/go/src/pkg/runtime/proc.c 1223]

这是错误日志详情,运行的是beego的chat例子。

更加人性化设计错误提示

目前会在服务器端打印错误日志,应该增加错误提示,当服务器端发生错误时,当在开发模式下时在浏览器端打印错误信息

建议默认配置文件路径和名字可以由用户指定

建议默认配置文件路径和名字可以有用户程序自定义,这样可以做成像一些比较流行的应用那样,编译时或运行时指定配置文件,而不必要把程序和配置的路径关系写死,例如Linxu用户习惯,程序一般放/usr/bin 配置一般放/etc 下

用SaveToFile文件上传后,一直占着虚拟内存没有释放

发现在windows中用SaveToFile保存上传后的文件,一直占着虚拟内存没有释放,再上传多几次C盘就满了
有什么方法比较优化的呢?
代码如下:

package main

import (
    "github.com/astaxie/beego"
)

type UploadController struct {
    beego.Controller
}
func (this *UploadController) Post() {
    _, h, _ := this.GetFile("uploadfile")
    this.SaveToFile("uploadfile", "./static/files/"+h.Filename)
    this.Ctx.Redirect(302, "/upload")

}

func main() {
    beego.Router("/upload", &UploadController{})
    beego.Run()
}

实现可扩展的Cache模块

目前支持内存缓存,接下来需要支持memcache、redis、file等方式的缓存,实现一个类似Session这样的模块

加入fcgi模式如何?

配置文件里加个选项,在App.Run里按配置启动不同模式。
1是Server上一般都开着Nginx来跑其它的程序会抢80端口
2是静态文件也可以交给Nginx来处理

库文件缺失

beego / example / chat / chat.go 中

import (
"fmt"
"github.com/astaxie/beego"
"github.com/fzzy/sockjs-go/sockjs" //这个文件貌似被移走了?
"strings"
)

Websocket Support

Do you have plan to support websocket/socket.io, If yes, please let me know.

mime返回类型异常

在beego中调用this.ServeJson()这个方法时。
会调用go提供的mime包类获取mime类型。
windows下mime包其实是个map。
var mimeTypes = map[string]string{
".css": "text/css; charset=utf-8",
".gif": "image/gif",
".htm": "text/html; charset=utf-8",
".html": "text/html; charset=utf-8",
".jpg": "image/jpeg",
".js": "application/x-javascript",
".pdf": "application/pdf",
".png": "image/png",
".xml": "text/xml; charset=utf-8",
}
但是没有json对应的类型。所以windows下返回json的格式是text。
但是可能是centos下实现方式不一样,同样地调用mime包提供的方法获取mime类型。
centos却可以返回正确的json类型。
麻烦谢哥查查这个问题。
或者建议beego实现自己的mime返回类型,不调用go提供的方法,这样保持项目在windows和linux下运行一致。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.