经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
go语言beego框架分页器操作及接口频率限制示例
来源:jb51  时间:2022/4/18 12:05:16  对本文有异议

获取所有文章数据

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

获取总条数

  1. count, _ := qs.Count()
  2. 1

设置每页的条数

  1. pageSetNum := 2
  2. 1

总页数和当前页码

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

获取分页数据

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

返回数据

  1. beego.Info(*articles)
  2. this.Data["articles"] = *articles
  3. this.Data["count"] = count
  4. this.Data["pageCount"] = pageCount
  5. this.Data["pageNum"] = pageNum
  6. this.TplName = "index.html"

beego接口频率限制

  1. package utils
  2. import (
  3. "github.com/astaxie/beego"
  4. "github.com/astaxie/beego/context"
  5. "github.com/astaxie/beego/logs"
  6. "github.com/ulule/limiter"
  7. "github.com/ulule/limiter/v3"
  8. "github.com/ulule/limiter/v3/drivers/store/memory"
  9. "net/http"
  10. "strings"
  11. )
  12. // RateLimiter this is a struct
  13. type RateLimiter struct {
  14. Limiter *limiter.Limiter
  15. Username string
  16. UserType string
  17. UserToken string
  18. RemainTimes int
  19. MaxTimes int
  20. }
  21. func RateLimit(rateLimit *RateLimiter, ctx *context.Context) {
  22. var (
  23. limiterCtx limiter.Context
  24. err error
  25. req = ctx.Request
  26. )
  27. opt := limiter.Options{
  28. IPv4Mask: limiter.DefaultIPv4Mask,
  29. IPv6Mask: limiter.DefaultIPv6Mask,
  30. TrustForwardHeader: false,
  31. }
  32. ip := limiter.GetIP(req, opt)
  33.  
  34. if strings.HasPrefix(ctx.Input.URL(), "/") {
  35. limiterCtx, err = rateLimit.Limiter.Get(req.Context(), ip.String())
  36. } else {
  37. logs.Info("The api request is not track ")
  38. }
  39. if err != nil {
  40. ctx.Abort(http.StatusInternalServerError, err.Error())
  41. return
  42. }
  43. if limiterCtx.Reached {
  44. logs.Debug("Too Many Requests from %s on %s", ip, ctx.Input.URL())
  45. // refer to https://beego.me/docs/mvc/controller/errors.md for error handling
  46. ctx.Abort(http.StatusTooManyRequests, "429")
  47. return
  48. }
  49. }
  50. func PanicError(e error) {
  51. if e != nil {
  52. panic(e)
  53. }
  54. }
  55. func RunRate() {
  56. // 限制每秒登录的请求次数
  57. theRateLimit := &RateLimiter{}
  58. // 100 reqs/second: "100-S" "100-s"
  59. loginMaxRate := beego.AppConfig.String("total_rule::reqrate")
  60. loginRate, err := limiter.NewRateFromFormatted(loginMaxRate + "-s")
  61. PanicError(err)
  62. theRateLimit.Limiter = limiter.New(memory.NewStore(), loginRate)
  63. beego.InsertFilter("/*", beego.BeforeRouter, func(ctx *context.Context) {
  64. RateLimit(theRateLimit, ctx)
  65. }, true)
  66. }

在main.go 里面调用方法即可

以上就是go语言beego框架分页器操作及接口频率限制示例的详细内容,更多关于go beego框架分页器操作接口频率限制的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号