首页 > 其他分享 >flask limiter 详解

flask limiter 详解

时间:2024-08-29 12:04:50浏览次数:8  
标签:示例 flask per Flask 详解 limit limiter 限流

在使用 Flask-Limiter(或类似的限流库)时,你可以设置一个标志来表示当请求频率超过设定的限制后采取的行为。这通常用于实现特定的逻辑,如锁定用户、记录违规行为或发送警告。

以下是一个基本示例,展示了如何在超过限制时设置标志:

安装 Flask-Limiter

确保你已经安装了 Flask-Limiter:

pip install Flask Flask-Limiter

limiter.limit 是 Flask-Limiter 中用于定义限流规则的装饰器,通常应用在 Flask 路由函数上。它的主要作用是为特定的路由设置请求频率的限制。limiter.limit 的参数允许你灵活地控制限流的行为。以下是每个参数的作用:

1. limit_value

  • 描述: 定义请求的频率限制。通常以字符串形式表示,例如 "5 per minute""10 per hour"
  • 类型: str 或者 callable
  • 作用: 决定一个用户在特定时间段内可以访问该路由的次数。如果传入的是 str,则它是一个固定的限流规则。如果传入的是 callable(如 lambda 函数),则它可以动态返回一个限流规则,这样限流规则可以根据实际情况动态调整。
  • 示例:
    @limiter.limit("10 per minute")
    @limiter.limit(lambda: "5 per second")

     

2. key_func

  • 描述: 用于计算限流的唯一标识符,即根据什么来区分不同的访问者。例如,可以基于用户 ID、IP 地址等。
  • 类型: callable
  • 作用: 默认情况下,Flask-Limiter 使用 get_remote_address(即 IP 地址)作为键值函数,但你可以自定义它。例如,通过用户 ID 或其他识别符来分配不同的限流。
  • 示例:   
    @limiter.limit("10 per minute")
    @limiter.limit(lambda: "5 per second")

     

3. per_method

  • 描述: 是否将不同的 HTTP 方法(如 GET、POST 等)视为独立的限流对象。
  • 类型: bool
  • 作用: 如果设置为 True,则相同的路由但不同的 HTTP 方法(如 GET 和 POST)将各自有独立的限流计数。默认是 False

示例:  

@limiter.limit("5 per minute", per_method=True)

 

    4. methods
  • 描述: 指定限流适用的 HTTP 方法。
  • 类型: listNone
  • 作用: 如果提供了这个参数,限流规则只会应用于指定的 HTTP 方法(如 ["GET", "POST"]),忽略其他方法。
  • 示例:
    @limiter.limit("5 per minute", methods=["POST"])

     

5. error_message

  • 描述: 自定义限流触发后的错误消息。
  • 类型: str
  • 作用: 当用户请求超过限流配额时,返回的错误消息。你可以用它来替换默认的消息。
  • 示例:
    @limiter.limit("5 per minute", error_message="Too many requests, slow down!")

     

6. exempt_when

  • 描述: 定义豁免限流的条件。
  • 类型: callable
  • 作用: 如果条件为 True,则当前请求不受限流规则的限制。你可以通过这个参数动态地为特定用户或条件豁免限流。
  • 示例:
    @limiter.limit("5 per minute", exempt_when=lambda: is_exempt_user(get_user_id()))

     

7. override_defaults

  • 描述: 是否覆盖全局定义的限流规则。
  • 类型: bool
  • 作用: 如果设置为 True,则局部定义的限流规则会覆盖全局定义的规则,而不会叠加在全局规则之上。默认为 False
  • 示例:
    @limiter.limit("5 per minute", override_defaults=True)

     

总结

limiter.limit 装饰器提供了灵活的限流控制能力,你可以根据需求动态调整限流规则、豁免特定条件下的限流、并且为不同的 HTTP 方法设定独立的限流规则。

 

标签:示例,flask,per,Flask,详解,limit,limiter,限流
From: https://www.cnblogs.com/zhaoyingjie/p/18386407

相关文章

  • C#学习笔记- 随机函数Random()的用法详解
    原文链接:https://www.jb51.net/article/90933.htmRandom.Next()返回非负随机数;Random.Next(Int)返回一个小于所指定最大值的非负随机数Random.Next(Int,Int)返回一个指定范围内的随机数,例如(-100,0)返回负数1、random(number)函数介绍random(number)返回一个0~number-1之间......
  • 地平线—征程2(Journey 2-J2)芯片详解(28)—MIPI RX/TX+SD/SDIO/eMMC Interface Timings
    写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客1......
  • 地平线—征程2(Journey 2-J2)芯片详解(29)—BIFSD+BIFSPI+QSPI Interface Timing
    写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客1......
  • Linux三剑客之grep命令详解
    grep是Linux中最常用的文本搜索工具,用于在文件或文本输出中查找与指定模式匹配的行。它支持基本正则表达式、扩展正则表达式、多文件搜索、递归搜索等多种功能,非常适合过滤、搜索和提取文本内容。1.grep的基本语法grep[选项]模式[文件...]模式:搜索的文本模式,可......
  • 深度学习实战86-高中数学问答大模型介绍、支持将批量的latex数学公式生成pdf的过程详
    大家好,我是微学AI,今天给大家介绍一下深度学习实战86-高中数学问答大模型介绍、支持将批量的latex数学公式生成pdf的过程详解。本文利用MathGPT数学大模型实现的数学教材智能问答系统。该系统结合了自然语言处理和数学知识图谱,能够理解用户的数学问题,并提供准确的答案和解......
  • kafka ---- producer与broker配置详解以及ack机制详解
    一、producer配置1、bootstrap.serverskafkabroker集群的ip列表,格式为:host1:port1,host2:port2,…2、client.id用于追踪消息的源头3、retries当发送失败时客户端会进行重试,重试的次数由retries指定,默认值是2147483647,即Integer.MAX_VALUE;在重试次数耗尽和delivery.......
  • Android 常用的性能分析工具详解:GPU呈现模式
    此篇将重点介绍几种常用的Android性能分析工具:一、Logcat日志选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗。当我们打开一个Activity的时候,log会打印一串log如下:I/ActivityManager﹕Displayedxxx.xxx.xxx/TestActivity:+1s272ms(total+3s843ms)第一......
  • mysqldump的使用详解
    一、mysqldump简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。二、备份命令2.1命......
  • Java异常详解(全文干货)
    介绍ThrowableThrowable是Java语言中所有错误与异常的超类。Throwable包含两个子类:Error(错误)和Exception(异常),它们通常用于指示发生了异常情况。Throwable包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。Error(错......
  • 基于python+flask框架的轮滑鞋销售网站(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着运动休闲文化的兴起和人们对健康生活方式的追求,轮滑运动作为一种集健身、娱乐、竞技于一体的活动,逐渐受到广大青少年的喜爱。轮滑鞋作......