如何在django中获取最后一次登录ip并保存到GenericIPAddressField?

时间:2016-07-23 22:51:34

标签: django django-allauth

我正在扩展用户个人资料并添加了一个last_ip字段,如下所示。每当用户登录其当前IP时,如何更新此字段?如果重要,我正在使用allauth。

class UserProfile(models.Model):  
    user = models.OneToOneField(User)
    last_ip = models.GenericIPAddressField(protocol='IPv4', verbose_name="Last Login IP")
    location = models.CharField(max_length=50, blank=True)

1 个答案:

答案 0 :(得分:7)

要实际获取用户IP地址,您可以使用django-ipware。还有其他方法但这个应用程序似乎尽可能覆盖,您可以查看this question以获取详细信息。

拥有USER_IP后,您可以创建中间件并为每个请求更新last_ip

# middleware.py
class LastLoginIP(object):
     def process_request(self, request):
         if request.user.is_authenticated():
            UserProfile.objects\
            .filter(user=request.user)\
            .update(last_ip=USER_IP)

# settings.py add the middleware
MIDDLEWARE_CLASSES = (
  ....
  your.middleware.LastLoginIP
)

或者,如果您已经设置了一个系统,每个配置文件只允许一次并发登录(每次用户切换设备时,他/她必须再次登录),那么您可以在登录期间更新last_ip