文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Flask 中非常受欢迎的五个扩展插件

2024-12-02 05:18

关注

Github地址:https://github.com/flask-admin/flask-admin

2.Flask-SQLAlchemy

Flask-SQLAlchemy 直接在SQLAlchemy的基础上封装了一层,简化了配置以及SQLAlchemy库的导入路径。

# config.py
SQLALCHEMY_DATABASE_URI = ''


# app.py
def create_app(config_name=None, app_name=None):
"""使用工厂模式创建app"""
if not app_name:
app_name = __name__
app = Flask(app_name)

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
db.init_app(app)

# model.py
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, unique=True, nullable=False)
email = db.Column(db.String, unique=True, nullable=False)


db.session.add(User(username="Flask", email="example@example.com"))
db.session.commit()

3.Flask-Migrate

Flask-migrate 是一个SQLAlchemy 数据库升级迁移工具,基于Alembic实现,它提供了一系列命进行数据库升级撤回操作。

from flask_alembic import Alembic

alembic = Alembic()
alembic.init_app(app)

4.Flask-JWT-Extended

前后端分离项目基本都是使用JWT来做用户认证,这是一个用来实现JWT功能的扩展,提供了很多配置参数,非常灵活,直接在config中配置就可以,省去很多造轮子的麻烦。

from flask_jwt_extended import create_access_token
from flask_jwt_extended import get_jwt_identity
from flask_jwt_extended import jwt_required
from flask_jwt_extended import JWTManager
jwt = JWTManager(app)


# view.py
@app.route("/login", methods=["POST"])
def login():
username = request.json.get("username", None)
password = request.json.get("password", None)
if username != "test" or password != "test":
return jsonify({"msg": "Bad username or password"}), 401
# 账号密码正确就创建token返回给前端
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token)


@app.route("/users", methods=["GET"])
@jwt_required()
def users():
# 这是一个需要用户登录后才可以访问的接口,直接装饰器jwt_required()修饰就可以,token校验不通过时会直接拦截。

# 这里的identity返回的对象取决于前面创建token的方法传的参数identtiy是什么
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200

还可以通过实现user_loader_callback_loader回调获得 get_current_user 对象

@jwt_ext.user_loader_callback_loader
def loader_user_callback(identity):
return User.query.filter_by(username=identity).first()

特别是4.0还实现了白名单功能,可直接对用户进行登录限制。

5.Flask-Limiter

Flask-Limiter 用于做接口频率限制的,它可以灵活基于不同资源来限制请求的次数,例如你可以对整个app做限制,页可以对某个blueprint限制,或者是对路由做限制,还支持自定义配置。

from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
app,
key_func=get_remote_address,
default_limits=["200 per day", "50 per hour"]
)
@app.route("/slow")
@limiter.limit("1 per day")
def slow():
return ":("

@app.route("/medium")
@limiter.limit("1/second", override_defaults=False)
def medium():
return ":|"

本文转载自微信公众号「Python之禅」,可以通过以下二维码关注。转载本文请联系Python之禅公众号。

来源:Python之禅内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯