This commit is contained in:
alex 2020-01-10 14:27:00 +03:00
parent a925d2f623
commit 6ad4e0d46f
3 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.7 on 2020-01-10 11:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('account', '0029_auto_20200109_1354'),
]
operations = [
migrations.AddField(
model_name='user',
name='last_ip',
field=models.GenericIPAddressField(blank=True, default=None, null=True, verbose_name='last IP address'),
),
]

View File

@ -136,6 +136,7 @@ class User(AbstractUser):
verbose_name=_('User last used locale'))
city = models.TextField(default=None, blank=True, null=True,
verbose_name=_('User last visited from city'))
last_ip = models.GenericIPAddressField(_('last IP address'), blank=True, null=True, default=None)
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'

View File

@ -14,8 +14,10 @@ def get_locale(cookie_dict):
def get_country_code(cookie_dict):
return cookie_dict.get('country_code')
def user_last_visit(get_response):
"""Updates user last visit w/ current"""
def middleware(request):
response = get_response(request)
if request.user.is_authenticated:
@ -25,10 +27,13 @@ def user_last_visit(get_response):
'city': determine_user_city(request),
})
return response
return middleware
def parse_cookies(get_response):
"""Parse cookies."""
def middleware(request):
cookie_dict = request.COOKIES
# processing locale cookie
@ -45,4 +50,28 @@ def parse_cookies(get_response):
response = get_response(request)
return response
return middleware
def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def user_last_ip(get_response):
"""Update user last ip address"""
def middleware(request):
response = get_response(request)
if request.user.is_authenticated:
User.objects.filter(pk=request.user.pk).update(**{
'last_ip': get_client_ip(request),
})
return response
return middleware