我正在尝试记录尝试使用信号登录的用户的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)
虽然我知道如何使用:request.META [REMOTE_ADDR]来获取IP地址,但我的问题是我无法在我的模型中使用请求实例。我不确定从请求中得到的东西是不错的做法。
建议的方法是什么?
任何回复都将不胜感激。
此致 Wenbert
答案 0 :(得分:1)
虽然我知道如何使用:request.META [REMOTE_ADDR]来获取IP地址,但我的问题是我无法在我的模型中使用请求实例。
这就是你有视图功能的原因。
我不确定从请求中得到的东西是不错的做法。
完全没问题。
这就是为每个视图功能提供请求的原因。
这就是你有视图功能的原因。
只需在视图功能中执行即可。除非你正在编写一种新的数据库接口,否则不要乱用信号。
答案 1 :(得分:1)
当实例传递给信号并且实例实际上是保存的对象时,您可以在保存实例时将请求对象或IP附加到实例。
user_login.request=request
user_login.save()
并在
之类的信号中检索它instance.request
答案 2 :(得分:0)
当用户登录时,Django会发出一个名为user_logged_in
的信号。通过将信号处理程序附加到此信号,您可以收到登录事件的通知。处理程序将传递user
和request
个对象。如您所知,您可以从request
对象获取IP地址。