我正在扩展用户个人资料并添加了一个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)
答案 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
。