Создание сигнала django для обновления пользовательских данных.

Я работаю над проектом django, где хочу реализовать сигнал, который должен вызываться при изменении какого-либо пользовательского адреса , Я видел встроенные сигналы, но они, похоже, не работают в моем случае, потому что, если я использую функцию сохранения, она будет вызываться и в других событиях сохранения, и, хотя я могу создать собственный сигнал, я не смогу выяснить, Как мне это назвать?

Пожалуйста, предложите.

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

6
задан Ankit Jaiswal 19 August 2010 в 10:45
поделиться

1 ответ

Начните с определения пользовательского сигнала. Пользовательский сигнал здесь является подклассом django.dispatch.Signal . Этот код может находиться в app / signal.py .

from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])

Затем убедитесь, что вы отправляете этот сигнал при изменении адреса вашего пользователя. В зависимости от того, как вы определили пользователя и адрес , это можно сделать в разных местах. Предположим, существует представление, которое позволяет пользователям обновлять свои модели Address . Предположительно, этот код находится в app / views.py .

from app import signals

def update_address(request, *args, **kwargs):
    # all the changes go well.
    signals.user_address_changed.send(sender=None, user=request.user)
    # Render to template etc.

Теперь вам нужно настроить приемник для этого сигнала.

from app.signals import user_address_changed

def handle_user_address_change(sender, **kwargs):
    """Trap the signal and do whatever is needed"""
    user = kwargs['user']
    # Write to log, update db, send mail etc.

user_address_changed.connect(handle_user_address_change)

Обновление

(После прочтения комментария; OP объясняет, что нет отдельного представления, которое обновляет адрес) В этом случае вы можете попытаться переопределить User.save () для отправки этого сигнала. Я говорю «попробуйте», потому что не знаю, используете ли вы собственный класс User или auth.User .

16
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: