18

設計図を作成したい。私が持っている現在の青写真の問題ではありません。私がすることができます。

しかし、アプリケーションでフラスコ拡張機能を使用したいとします (私の場合、フラスコキャッシュを統合したい)?

私がこれまでに行ったことはすべてエラーになりました:

  • キャッシュ = キャッシュ (my_blueprint)

  • キャッシュとキャッシュのさまざまな部分をさまざまな形でインポートする

だからフラスコキャッシュのようなものは私のアプリをラップするのに十分簡単です:

from flask.ext.cache import Cache
cache = Cache(app)

しかし、これを青写真で使用するか、青写真で使用するかは、今のところよくわかりません。

編集: あまり明白でない解決策は、拡張機能から盗み出し、独自のライブラリを構築してブループリントにインポートすることでしたが、それはより多くの作業であり、まだ完了していません。拡張機能/設計図は、現在の私の理解レベルでは互換性がないようです。

4

2 に答える 2

52

循環インポートを避けるために、アプリケーション インスタンスとは別にキャッシュ インスタンスを作成する必要があります (より複雑なものを構築する場合は、アプリ ファクトリ モジュールへの切り替えを検討することをお勧めします)。

cache.py

from flask_cache import Cache

cache = Cache()

foo.py

from flask import Blueprint
from cache import cache

mod = Blueprint(...)

@mod.route("/")
@cache.cached(timeout=50)
def index():
    return datetime.now().strfmtime("%Y-%m-%d %H:%M:%S")

app.py

from flask import Flask
from yourapp.cache import cache
from yourapp.foo import mod

app = Flask("yourapp")

# ... snip ...

cache.init_app(app)

# ... snip ...

app.register_blueprint(mod)
于 2012-06-14T05:15:10.530 に答える
0

アプリケーションがアクセスする必要があるのはappcache.

あなたのコードを仮定しましょう:cache = Cache(app)は ですfoo.pybar.pyしかし、ブループリントを使用してルートを登録するキャッシュを使用したいと考えています。

foo.py:

from flask.ext.cache import Cache
cache = Cache(app)

from bar import mod
app.register_blueprint(mod)

で行う必要があるのは、 fromをbar.pyインポートして使用することだけです。cachefoo.py

bar.py:

from foo import chache

mod = Blueprint(...)


@mod.route('/')
@cache.cached(timeout=50)
def index():
    return str(datetime.now())

Flask キャッシュのドキュメント

編集:上記の例には、循環インポートに関する問題があります。ここに行く方法は、アプリをキャッシュから分離することです。

pack/__ init __.py:

app = Flask(__name__)

from pack.views.general import mod
app.register_blueprint(mod)

パック/cache.py:

from flask.ext.cache import Cache

from pack import app

cache = Cache(app)

パック/ビュー/general.py:

from flask import Blueprint
from pack.chache import chache

mod = Blueprint(...)


@mod.route('/')
@cache.cached(timeout=50)
def index():
    return str(datetime.now())
于 2012-06-13T17:56:30.490 に答える