Flask 中最受欢迎的 5 个扩展插件

这是「进击的Coder」的第 242 篇技术分享

作者:崔庆才

来源:崔庆才丨静觅

阅读本文大概需要 7 分钟。

1、 Flask-Admin

Django 中有个杀手锏的功能就是自带 Admin 面板,所有数据都可以通过 Admin 后台来操作, Flask-Admin 就是一个功能和 Django-Admin 非常类似的库,有了它你再也不需要直接去数据库查数据改数据了。

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

8a0a8d14ddff5d903bf107541cda699b.png

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)

8d882655dda4be63761377f1dfcd9ee3.png

4、Flask-JWT-Extended

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

cadf06490bf9b46a5eacacc08ac0c4e7.png


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 还实现了白名单功能,可直接对用户进行登录限制。

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 ":|"

7cd1c16fed5098ee680148de4c5a8588.png

End

崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,‍同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!

内容介绍:《Python3网络爬虫开发实战(第二版)》内容介绍

5227aa68487711bb17b26edc2055f14f.png

扫码购买

51721f81e8192122ec53207066bb0413.png

好文和朋友一起看~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值