Flask框架-流量控制:flask-limiter的使用

这篇具有很好参考价值的文章主要介绍了Flask框架-流量控制:flask-limiter的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、flask使用flask-limiter存在版本问题

Flask==1.1.4
Flask-Bootstrap==3.3.7.1
Flask-Caching==1.9.0
Flask-Cors==3.0.10
Flask-Limiter==1.4
Flask-Migrate==2.5.3
Flask-RESTful==0.3.8
Flask-Script==2.0.6
Flask-SocketIO==5.0.1
Flask-Sockets==0.2.1
Flask-SQLAlchemy==2.4.4
Jinjia2==2.11.3
Werkzeug==1.0.1

flask1.x.x版本,使用flask-limiter=1.4.0版本的。

二、配置

ext/__init__.py

from flask_sqlalchemy import SQLAlchemy
from flask_restful import Api
from flask_cors import CORS
from flask_socketio import SocketIO
from threading import Lock
from flask_caching import Cache
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address #以ip地址作为流量控制条件

db = SQLAlchemy() #数据库拓展
api = Api() #api拓展
# cors = CORS(cors_allowed_origins='*')
cors = CORS()
socketio = SocketIO(cors_allowed_origins='*') #websocket拓展
all_lock = Lock() 
cache = Cache() #缓存

limiter = Limiter(key_func=get_remote_addr,default_limits=['120/minute']) 
#流量控制拓展,设置了一个全局的流量控制,所有的接口都生效

apps/__init__.py

from flask import Flask
from ext import limiter

app = Flask(__file__)
limiter.init_app(app) #拓展流量控制

三、简单使用

频率限制语法:

1、'100 per day'、'20 per hour'、'5 per minute'、'1 per second'

2、'100/day'、'20/hour'、'5/minute'、'1/second'    #推荐这个,看起来简单

FBV使用

from ext import limiter
from flask import jsonify,request
from apps import app

@limiter.limit('5/minute')  #一分钟5次
@app.route('/test',method=['POST','GET'])
def test():
    return jsonify({'code':200,'msg':'测试'})

CBV使用

from ext import limiter
from flask import jsonify,request
class TestRateView(views.MethodView):
    decorators = [limiter.limit("5/minute")]
    def get(self):
        return view_response(code=200,msg='测试西安舒')

四、高级使用

在很多时候,我们不仅仅需要对IP进行流量控制,可能需要对用户名,对请求携带的数据进行流量控制,这时候就需要自定义流量控制的条件了

from base.authen import decode_token_for_limiter
from flask import request
#根据用户的id作为限制
def get_user_id():
    token = request.headers.get('token')
    if not token:
        token = request.cookies.get('token')
    if token:
        #解析token,拿到用户的id
        user = decode_token_for_limiter(token)
    else:
        user = 'anonymity'
    #返回什么,就对什么进行流量控制
    return user

使用:

from ext import limiter
from flask import jsonify,request
from util.limiter_ import get_user_id

class TestRateView(views.MethodView):
    decorators = [limiter.limit("5/minute",key_func=get_user_id)]
    def get(self):
        return view_response(code=200,msg='测试西安舒') 

五、处理流量控制的状态码

在开发过程中,一般需要统一状态码,或者使用自己的一套规则。一般需要重新修改状态码的。

可以使用flask自带的异常处理装饰器来实现:

在启动文件中:超过频率限制时,状态码 是429,可以捕获这个状态码文章来源地址https://www.toymoban.com/news/detail-623314.html

from flask import jsonify
from apps import app

@app.errorhandler(429)
def handle_rate_limit_exceeded(e):
    return jsonify({"error": "请求频率超过限制",'code':400}), 200

到了这里,关于Flask框架-流量控制:flask-limiter的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Flask框架mock server实战(三)

    test_case.py 修改test_01如下

    2024年02月13日
    浏览(39)
  • 使用Dockerfile构建python项目镜像(flask框架+redis+环境变量)

    有时候如连接redis的url可能发生变化等,这时候就需要把一些变量放在环境变量中。         使用 --env 和 -e 是一样效果的。 1.1.1 配置Dockerfile文件 1.1.2 编写python示例程序 示例代码: 1.1.3 构建镜像         首先将python代码和dockerfile文件上传到已经安装了docker的服务器

    2024年02月07日
    浏览(50)
  • Python使用flask框架与前端建立websocket链接,并进行数据交互

    后端采用的框架为flask,前端用的flask自带的html编写,实现的功能为:前后端建立websocket链接并进行数据交互 一、编写一个flask后端服务 常规创建方式就可以,创建一个flask服务。声明一个websocket实例,以websocket的方式启动这个服务。 安装相关依赖: 声明应用和websocket实例

    2024年04月11日
    浏览(46)
  • flask框架-认证权限(一):使用g对象存登录用户信息,认证权限一起实现

    apps         -user         __init__.py authen        __init__.py         token.py ext         __init__.py util.py        public.py         __init__.py app.py 依赖包 authen/token.py user/views.py 认证大致的逻辑: 1、用户登录时,生成token,前端保存token信息 2、前端发起请求时,将token携带在cook

    2024年02月09日
    浏览(44)
  • 手把手教你使用Flask框架构建Python接口以及如何请求该接口

    Flask是一个轻量级的Web应用框架,基于Python编写,其核心思想是保持简洁,灵活性和易于扩展。 Flask是一个轻量级的Web应用框架,基于Python编写,其核心思想是保持简洁,灵活性和易于扩展。Flask提供了基本的Web开发工具和应用程序的结构,但同时也允许开发者自由选择其他库

    2024年02月06日
    浏览(107)
  • 【100天精通Python】Day49:Python Web编程_Web框架,Flask框架从安装到使用

    目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由

    2024年02月09日
    浏览(49)
  • 【100天精通python】Day50:python web编程_web框架,Flask的使用

    目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由

    2024年02月10日
    浏览(48)
  • Flask 是什么?Flask框架详解及实践指南

    Flask 是一个轻量级的 Python Web 框架,它被广泛用于构建 Web 应用程序和  API 。Flask 简单易用,具有灵活性和可扩展性,是许多开发者喜欢用其构建项目的原因。本文将介绍 Flask 是什么以及如何使用它来构建 Web 应用程序,同时提供一个实践案例,让你能够在 IDE 编辑器中运行

    2024年02月14日
    浏览(37)
  • 【Python】极简部署私有化ChatGPT-Web,使用Flask框架编写网页版ChatGPT

    python环境下可极简配置 windows、linux、mac os均可部署 支持多用户使用 多对话管理 公式显示 流式逐字加载显示 代码高亮 仓库链接地址:https://github.com/LiangYang666/ChatGPT-Web,用的好麻烦给个star啦 可参照README 执行 python flask_main.py 运行程序.若程序中未指定apikey也可以在终端执行时

    2024年02月01日
    浏览(72)
  • 创建一个简单的区块链,并使用 Flask 框架提供一个简单的 Web 接口来与区块链交互。

    目录 前言 一、代码展示 二、代码注释 1.简单的区块链模拟实现,这段代码定义了一个简单的区块链类,可以创建一个新的区块链,并能够添加新的区块到链上,同时获取最新的区块信息。这个模拟的区块链可以用于教学或演示区块链的基本概念。 2.这段代码是一个简单的工

    2024年04月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包