本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
go语言beego框架分页器操作及接口频率限制示例
沙雕mars · 217浏览 · 发布于2022-04-18 +关注

这篇文章主要为大家介绍了go语言beego框架分页器操作使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

获取所有文章数据

o := orm.NewOrm()
qs := o.QueryTable("Article")
12


获取总条数 

count, _ := qs.Count()

1

设置每页的条数

pageSetNum := 2

1


总页数和当前页码 

//  总页数
pageCount := math.Ceil((float64(count) / float64(pageSetNum)))
//  获取当前页码
pageNum, err := this.GetInt("pageNum")
if err != nil {
    pageNum = 1
}
1234567


获取分页数据 

//存储分页数据的切片
articles := new([]models.Article)
//获取分页数据
qs.Limit(pageSetNum, pageSetNum*(pageNum - 1)).All(articles)
1234


返回数据 

beego.Info(*articles)
this.Data["articles"] = *articles
this.Data["count"] = count
this.Data["pageCount"] = pageCount
this.Data["pageNum"] = pageNum
this.TplName = "index.html"


beego接口频率限制 

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

相关推荐

PHP实现部分字符隐藏

沙雕mars · 1324浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 908浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 968浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 962浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1086浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
做自己,让别人去说,欢迎各位关注!
分类专栏
小鸟云服务器
扫码进入手机网页