如何使用 Flask 缓存变量?

Nel*_*mbo 5 python caching flask flask-caching

我正在使用 Flask 构建一个 Web 表单,希望用户能够输入多个条目,并在将数据发送到数据库之前让他们有机会使用撤消按钮后悔输入。我正在尝试使用Flask-Caching但未能正确设置它。

我已经按照Flask Mega-Tutorial来设置 Flask(这是我的第一个 Flask 应用程序)。

+---app
|   |   forms.py
|   |   routes.py
|   |   __init__.py
|   +---static
|   +---templates
Run Code Online (Sandbox Code Playgroud)

我想知道我需要如何配置 Flask 应用程序才能基本上能够执行以下操作:

cache.add("variable_name", variable_data)
variable_name = cache.get("variable_name")
cache.clear()
Run Code Online (Sandbox Code Playgroud)

在其中一页(带有 @app.route 装饰器的函数)?

在应用程序中。init.py我有:

from flask import Flask
from config import Config
from flask_caching import Cache

app = Flask(__name__)
app.config.from_object(Config)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

from app import routes
Run Code Online (Sandbox Code Playgroud)

在routes.py中我有:

from flask import current_app
Run Code Online (Sandbox Code Playgroud)

当我尝试调用缓存时,我使用下面的代码。

current_app.cache.add("variable_name", variable_data)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用该表单时,出现以下错误:

AttributeError: 'Flask' object has no attribute 'cache'
Run Code Online (Sandbox Code Playgroud)

我发现的几乎所有教程都只是在同一模块中包含应用程序声明和所有路由。但是,当我在另一个模块中有路由时,如何访问缓存呢?

eus*_*iro 7

1.客户端缓存(内置)

  • 所有会话数据作为 Cookie 存储在客户端。

显式存储变量的示例:username

from flask import Flask, session, request 

app = Flask(__name__)
app.config["SECRET_KEY"] = "any random string"

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        session["username"] = request.form["username"]
    # to get value use session["username"]
Run Code Online (Sandbox Code Playgroud)

2. 服务器端缓存 - ( Flask-Caching包)

显式存储变量的示例:username

from flask import Flask, request 
from flask_caching import Cache

app = Flask(__name__)
app.config["SECRET_KEY"] = "any random string"
app.config["CACHE_TYPE"] = "SimpleCache" # better not use this type w. gunicorn
cache = Cache(app)

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        cache.set("username", request.form["username"])
    # to get value use cache.get("username")
Run Code Online (Sandbox Code Playgroud)

如果是带有gunicorn的多线程服务器,我刚刚测试过最好的方法是['CACHE_TYPE'] = 'FileSystemCache'看看这里