1. 程式人生 > 其它 >Flask5個擴充套件外掛

Flask5個擴充套件外掛

轉: Flask 中最受歡迎的5個擴充套件外掛 (qq.com)

1、 Flask-Admin

Django中有個殺手鐗的功能就是自帶Admin面板,所有資料都可以通過Admin後臺來操作, Flask-Admin 就是一個功能和Django-Admin非常類似的庫,有了它你再也不需要直接去資料庫查資料改資料了。

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

 

 

 

 

 

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="[email protected]"))
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還實現了白名單功能,可直接對使用者進行登入限制。

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