Zeeshan Zeeshan - 1 year ago 101
Python Question

flask: post data after insert, delete and update in database

I want to post data to a target url after insertion, updation and deletion in a model in flask like rest-hooks in django. for now i have only found signal events of flask-sqlalchemy like below:

@event.listens_for(MyModel, 'after_insert')
def do_stuff(mapper, connection, target):

So how to do this in flask like we do using rest-hooks in Django or is there any other library which i can use.

Thanks in advance.

Answer Source

I am assuming your REST end-point where you want to POST to is in the same flask application. It is a good practice to separate out the business logic in your REST end-points and share the code across your whole application.

In my case, I usually create separate py files (called them services) and move the business logic there:

# inventory_services.py

def delete_item(id, data):
    # ... business logic here

Then call this method from your REST end-point where you POST data to:

from inventory_services import delete_item

@api.route('/inventory/delete-item', methods=['POST'])
def delete_item_api():
    posted_data = request.get_json()
    delete_item(posted_data.id, posted_data.data)

Use the same service methods in your SQL Alchemy hook methods:

from inventory_services import delete_item

@event.listens_for(MyModel, 'after_insert')
def do_stuff(mapper, connection, target):
    delete_item(id, data)

The basic idea here is to move the code in your api methods to other plain functions so that they will be accessible across your whole application.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download