Use Blinker signals in Flask to hook into request lifecycle and define custom application events.
Flask Signals (Blinker)
pip install blinker
from flask import got_request_exception, request_started, request_finished
from blinker import signal
# Built-in Flask signals
request_started.connect(lambda app, **kw: print("Request started"))
got_request_exception.connect(lambda app, exception, **kw: log_error(exception))
# Custom signals
user_registered = signal("user-registered")
post_published = signal("post-published")
def send_welcome(sender, user, **kwargs):
send_email(user.email, "Welcome!")
user_registered.connect(send_welcome)
# Fire signal
@app.route("/register", methods=["POST"])
def register():
user = create_user(request.json)
user_registered.send(app, user=user)
return jsonify(user.to_dict()), 201