Django — Как получить IP-адрес запроса в пользовательском приемнике?

#python #django

#python #django

Вопрос:

У меня есть следующий код:

 @receiver(user_logged_in)
def user_logged_in_callback(sender, request, user, **kwargs):  
    ip = request.META.get('REMOTE_ADDR')
    AuditEntry.objects.create(action='User logged in', ip=ip, username=user.username)
 

Это отлично работает.

В views.py У меня есть индивидуальный приемник:

 @receiver(pre_save, sender=User)
def user_updated(sender, **kwargs):
    user = kwargs.get('instance', None)
    ip = request.META['REMOTE_ADDR']
    if user:
        new_password = user.password
        try:
            old_password = User.objects.get(pk=user.pk).password
        except User.DoesNotExist:
            old_password = None
        if new_password != old_password:
            AuditEntry.objects.create(action='Password has changed', ip="127.0.0.1", username=user.username)
 

Наверняка он падает с ошибкой «запрос не найден».

Я не могу понять, как извлечь IP.

Спасибо.

Или, может быть, я перепроектирую свой код? Все, что мне нужно, это создать AuditEntry с параметрами после изменения модели пользователя.

Комментарии:

1. Вы забыли параметр запроса в функции user_updated?

2. user_updated() отсутствует 1 требуемый позиционный аргумент: ‘запрос’. Это нужно как-то пропустить.

Ответ №1:

Для меня похоже, что вы забыли параметр запроса в своей функции.

Вам нужно передать параметр запроса.

Комментарии:

1. Я попытался, он вернул ‘user_updated() отсутствует 1 требуемый позиционный аргумент: ‘запрос»

2. затем проверьте, где вы вызываете user_updated, еще одна вещь, проверьте, есть ли Ip в kwargs geeksforgeeks.org/args-kwargs-python