2016-07-23 5 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이 있으면, 당신은 미들웨어를 만들 수 있습니다 당신은 이미 단지 프로필 당 하나의 동시 로그인을 할 수있는 시스템을 설정 한 경우 (

# 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를 업데이트 사용자가 기기를 전환 할 때마다 다시 로그인해야 함) 로그인 할 때 last_ip을 업데이트 할 수 있습니다.