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を更新できます。

関連する問題