2016-11-24 2 views
1

Я хочу отправить данные на целевой URL после вставки, обновления и удаления в модели в колбе, как rest-hooks в django. сейчас я только нашел события сигнальной колбы-SQLAlchemy, как показано ниже:колба: данные после вставки, удаления и обновления в базе данных

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

Так, как это делается в колбе, как мы с помощью отдыха крючков в Django или есть другие библиотеки, которые я могу использовать.

Заранее спасибо.

+0

Кажется, что у вас уже есть это. ваш метод do_stuff будет запущен после вставки. Вы можете сделать то же самое с '' after_update'' и '' after_delete''. Или ваш вопрос о том, как сделать почтовый запрос в python? Для этого вы можете использовать запросы, например (http://docs.python-requests.org/en/master/). – AArias

+0

@AArias да, я понял это, но я также хочу знать, есть ли библиотека, как крючки для отдыха в колбе тоже. – Zeeshan

ответ

1

Я предполагаю, что ваша конечная точка REST, в которой вы хотите POST, находится в том же приложении с флягой. Хорошая практика заключается в том, чтобы отделить бизнес-логику в конечных точках REST и поделиться кодом по всему вашему приложению.

В моем случае, я обычно создаю отдельные PY файлов (их называли услуги) и перемещать бизнес-логику там:

# inventory_services.py 

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

Затем вызовите этот метод из вашего REST конечной точки, где вы POST данных для:

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) 

Используйте те же методы обслуживания в своих методах крючками SQL алхимии:

from inventory_services import delete_item 

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

Основная идея здесь - переместить код в ваших методах api на другие простые функции, чтобы они были доступны для всего вашего приложения.

+0

Спасибо за помощь – Zeeshan

+0

@ Zeeshan Glad Я помог. – Leone

Смежные вопросы