設計図のイヴイベントフックを使って

ポール·フレックス著

フラスコの使用 Blueprints 典型的なEVEリソースに適していない新しい端末を使用して,我々のEVEアプリケーションを拡張するのを支援する.これらの端点をEVEスコープから移動させることで,特定の状況に対処するための特定のコードを作成することができる.

設計図の文脈では,EVE機能は利用できないことが予想されるが,通常はそうではない.例えば一連の機能を使い続けることができます 事件とリンクする. それがそうです。

次のコード断片は users モジュールにはカスタム操作を実行して使用する青写真があります users_deleted EVEアプリケーションに登録されているすべてのコールバック関数の信号を通知して呼び出す。

from flask import Blueprint, current_app as app

blueprint = Blueprint('prefix_uri', __name__)

@blueprint.route('/users/<username>', methods=['DELETE'])
def del_user(username):
    # some specific code goes here
    # ...

    # call Eve-hooks consumers for this  event
    getattr(app, "users_deleted")(username)

次のセグメントは、メインEveアプリケーションにどのようにバインドされているか、具体的なものを示しています set_username_as_none 関数は,Eveイベントを用いてユーザを削除するたびに呼び出され,正しいMongoDB集合を更新するように登録される.

from eve import Eve
from users import blueprint
from flask import current_app, request

def set_username_as_none(username):
    resource = request.endpoint.split('|')[0]
    return  current_app.data.driver.db[resource].update(
        {"user" : username},
        {"$set": {"user": None}},
        multi=True
    )

app = Eve()
# register the blueprint to the main Eve application
app.register_blueprint(blueprint)
# bind the callback function so it is invoked at each user deletion
app.users_deleted += set_username_as_none
app.run()