go语言beego框架分页器操作及接口频率限制示例

作者:Jeff的技术栈 时间:2024-04-25 15:15:13 

获取所有文章数据

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 里面调用方法即可

来源:https://www.cnblogs.com/guyouyin123/p/14084881.html

标签:go,beego,分页器,接口,频率限制
0
投稿

猜你喜欢

  • Python简单删除列表中相同元素的方法示例

    2021-10-21 11:25:18
  • python k-近邻算法实例分享

    2022-03-26 14:47:17
  • Python+OpenCV实战之利用 K-Means 聚类进行色彩量化

    2021-01-02 09:20:27
  • Apache SkyWalking 监控 MySQL Server 实战解析

    2024-01-24 01:31:54
  • 配置Git并从GitHub上克隆项目

    2023-03-13 12:38:16
  • Python利用雪花算法实现生成唯一ID

    2022-10-18 14:49:06
  • 服务器XMLHTTP(Server XMLHTTP in ASP)基础知识

    2011-03-06 11:11:00
  • SQL SERVER EXPRESS 常见问题及解决办法

    2008-09-13 19:07:00
  • SQLServer 连接 EXCEL

    2009-07-09 19:00:00
  • Python闭包和装饰器用法实例详解

    2021-04-07 10:05:02
  • Python使用reportlab模块生成PDF格式的文档

    2021-05-25 22:17:31
  • Vue中this.$nextTick()的具体使用

    2023-07-02 16:59:30
  • Python使用Excel将数据写入多个sheet

    2022-01-20 11:52:08
  • python 常用的基础函数

    2023-07-24 11:10:51
  • pygame实现弹球游戏

    2023-05-26 20:38:44
  • 2007淘宝UED招聘题解(前端开发部分)

    2007-11-24 10:32:00
  • 如何利用Python处理excel表格中的数据

    2022-10-27 03:32:38
  • Python使用re模块实现信息筛选的方法

    2021-10-10 09:34:46
  • scrollWidth,clientWidth,offsetWidth的区别

    2024-04-22 22:29:00
  • 利用python3如何给数据添加高斯噪声

    2023-06-11 20:52:17
  • asp之家 网络编程 m.aspxhome.com