我正在尝试记录使用信号登录的用户的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地址: meta[REMOTE_ADDR]我的问题是我不能在我的模型中使用请求示例。我也不确定从请求中获取一些东西是否是好的实践。
推荐的方法是什么?
如有任何答复,将不胜感激。
问候你,温伯特
4条答案
按热度按时间5fjcxozz1#
尽管我知道如何使用以下方法获取IP地址:request.META [REMOTE_ADDR]我的问题是我不能在我的模型中使用请求示例。
这就是为什么要有视图函数。
我也不确定从请求中获得一些东西是否是好的实践。
这是非常好的。
只要在视图函数中就可以了,不要乱加信号,除非你在写一种新的数据库接口。
nlejzf6q2#
由于示例被传递到信号中,并且示例实际上是保存的同一个对象,因此您可以在保存示例时将请求对象或IP附加到示例。
并在信号中检索它
vaqhlq813#
Django有一个当用户登录时触发的信号
user_logged_in
。通过在这个信号上附加一个信号处理程序,你可以得到登录事件的通知。user
和request
对象传递给这个处理程序。正如你所注意到的,你可以从request
对象中获得IP地址。kwvwclae4#
这是一个很老的问题,但我今天遇到了同样的问题,这是谷歌的第一个热门主题。所以也许这对其他人也有帮助。这就是我的工作原理。