获取所有文章数据
1
2
3
|
o := orm.NewOrm() qs := o.QueryTable( "Article" ) 12 |
获取总条数
1
2
|
count, _ := qs.Count() 1 |
设置每页的条数
1
2
|
pageSetNum := 2 1 |
总页数和当前页码
1
2
3
4
5
6
7
8
|
// 总页数 pageCount := math.Ceil(( float64 (count) / float64 (pageSetNum))) // 获取当前页码 pageNum, err := this.GetInt( "pageNum" ) if err != nil { pageNum = 1 } 1234567 |
获取分页数据
1
2
3
4
5
|
//存储分页数据的切片 articles := new ([]models.Article) //获取分页数据 qs.Limit(pageSetNum, pageSetNum*(pageNum - 1 )).All(articles) 1234 |
返回数据
1
2
3
4
5
6
|
beego.Info(*articles) this.Data[ "articles" ] = *articles this.Data[ "count" ] = count this.Data[ "pageCount" ] = pageCount this.Data[ "pageNum" ] = pageNum this.TplName = "index.html" |
beego接口频率限制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package utils import ( "github.com/astaxie/beego" "github.com/astaxie/beego/context" "github.com/astaxie/beego/logs" "github.com/ulule/limiter" "github.com/ulule/limiter/v3" "github.com/ulule/limiter/v3/drivers/store/memory" "net/http" "strings" ) // RateLimiter this is a struct type RateLimiter struct { Limiter *limiter.Limiter Username string UserType string UserToken string RemainTimes int MaxTimes int } func RateLimit(rateLimit *RateLimiter, ctx *context.Context) { var ( limiterCtx limiter.Context err error req = ctx.Request ) opt := limiter.Options{ IPv4Mask: limiter.DefaultIPv4Mask, IPv6Mask: limiter.DefaultIPv6Mask, TrustForwardHeader: false , } ip := limiter.GetIP(req, opt) if strings.HasPrefix(ctx.Input.URL(), "/" ) { limiterCtx, err = rateLimit.Limiter.Get(req.Context(), ip. String ()) } else { logs.Info( "The api request is not track " ) } if err != nil { ctx.Abort(http.StatusInternalServerError, err. Error ()) return } if limiterCtx.Reached { logs.Debug( "Too Many Requests from %s on %s" , ip, ctx.Input.URL()) // refer to https://beego.me/docs/mvc/controller/errors.md for error handling ctx.Abort(http.StatusTooManyRequests, "429" ) return } } func PanicError(e error ) { if e != nil { panic (e) } } func RunRate() { // 限制每秒登录的请求次数 theRateLimit := &RateLimiter{} // 100 reqs/second: "100-S" "100-s" loginMaxRate := beego.AppConfig. String ( "total_rule::reqrate" ) loginRate, err := limiter.NewRateFromFormatted(loginMaxRate + "-s" ) PanicError(err) theRateLimit.Limiter = limiter. New (memory.NewStore(), loginRate) beego.InsertFilter( "/*" , beego.BeforeRouter, func (ctx *context.Context) { RateLimit(theRateLimit, ctx) }, true ) } |
在main.go 里面调用方法即可
以上就是go语言beego框架分页器操作及接口频率限制示例的详细内容,更多关于go beego框架分页器操作接口频率限制的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/guyouyin123/p/14084881.html