Джанго: Получить IP-адрес, используя сигнал - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь зарегистрировать IP-адрес пользователя, который пытается войти, используя сигналы.Как мне это сделать?

Я уже зафиксировал дату и время для входа в систему.

#models.py
class UserLogin(models.Model):
    """user details when logging in"""        
    user        = models.ForeignKey(User)
    timestamp   = models.DateTimeField(auto_now=True)

Это для сигнала:

#models.py
def user_login_save(sender, instance, **kwargs):
if instance.last_login:
    old = instance.__class__.objects.get(pk=instance.pk)
    if instance.last_login != old.last_login:
        instance.userlogin_set.create(timestamp=instance.last_login)

models.signals.post_save.connect(user_login_save,  sender=User)

Хотя я знаю какчтобы получить IP-адрес, используя: request.META [REMOTE_ADDR], моя проблема в том, что я не могу использовать экземпляр запроса в моей модели.Я также не уверен, является ли получение чего-либо из запроса хорошей практикой.

Каков рекомендуемый способ сделать это?

Любой ответ будет принят с благодарностью.Венберт

Ответы [ 3 ]

1 голос
/ 07 декабря 2010

Поскольку экземпляр передается в сигнал, а экземпляр действительно является тем же объектом, который сохранен, вы можете прикрепить объект запроса или IP к экземпляру после его сохранения.

user_login.request=request
user_login.save()

И получить его в виде сигнала

instance.request
1 голос
/ 07 декабря 2010

Хотя я знаю, как получить IP-адрес, используя: request.META [REMOTE_ADDR], моя проблема в том, что я не могу использовать экземпляр запроса в моей модели.

Вот почему у вас есть функции просмотра.

Я также не уверен, что получение чего-либо из запроса является хорошей практикой.

Этоотлично в порядке.

  • Именно поэтому запрос предоставляется для каждой функции просмотра.

  • Именно поэтому у вас есть функции просмотра.

Просто сделайте это в функции просмотра.Не связывайтесь с сигналами, если вы не пишете новый тип интерфейса базы данных.

0 голосов
/ 01 сентября 2013

У Django есть сигнал, который срабатывает всякий раз, когда пользователь входит в систему, который называется user_logged_in.Прикрепив обработчик сигнала к этому сигналу, вы можете получать уведомления о событиях входа в систему.Обработчику передаются объекты user и request.Как вы заметили, вы можете получить IP-адрес от объекта request.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...