設計図のイヴイベントフックを使って¶
ポール·フレックス著
フラスコの使用 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()