2016-07-23 102 views
1

我正在擴展用戶配置文件並添加了如下所示的last_ip字段。當用戶登錄到當前IP時,如何更新此字段?如果它很重要,我正在使用allauth。如何在django中獲取最後一次登錄ip並保存到GenericIPAddressField?

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) 

回答

6

對於實際獲取用戶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

相關問題