last country
This commit is contained in:
parent
e8538d4fc2
commit
989e9f9465
|
|
@ -24,7 +24,7 @@ class UserAdmin(BaseUserAdmin):
|
|||
list_filter = ('is_active', 'is_staff', 'is_superuser', 'email_confirmed',
|
||||
'groups',)
|
||||
search_fields = ('email', 'first_name', 'last_name')
|
||||
readonly_fields = ('last_login', 'date_joined', 'image_preview', 'cropped_image_preview', 'last_ip')
|
||||
readonly_fields = ('last_login', 'date_joined', 'image_preview', 'cropped_image_preview', 'last_ip', 'last_country')
|
||||
fieldsets = (
|
||||
(None, {'fields': ('email', 'password',)}),
|
||||
(_('Personal info'), {
|
||||
|
|
@ -36,7 +36,7 @@ class UserAdmin(BaseUserAdmin):
|
|||
'newsletter',
|
||||
)
|
||||
}),
|
||||
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'last_ip')}),
|
||||
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'last_ip', 'last_country')}),
|
||||
(_('Permissions'), {
|
||||
'fields': (
|
||||
'is_active', 'is_staff', 'is_superuser', 'email_confirmed',
|
||||
|
|
|
|||
20
apps/account/migrations/0031_user_last_country.py
Normal file
20
apps/account/migrations/0031_user_last_country.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 2.2.7 on 2020-01-10 12:10
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('main', '0045_carousel_is_international'),
|
||||
('account', '0030_user_last_ip'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='last_country',
|
||||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='main.SiteSettings', verbose_name='last site settings'),
|
||||
),
|
||||
]
|
||||
|
|
@ -137,6 +137,14 @@ class User(AbstractUser):
|
|||
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)
|
||||
last_country = models.ForeignKey(
|
||||
SiteSettings,
|
||||
verbose_name=_('last site settings'),
|
||||
blank=True,
|
||||
null=True,
|
||||
default=None,
|
||||
on_delete=models.SET_NULL,
|
||||
)
|
||||
|
||||
EMAIL_FIELD = 'email'
|
||||
USERNAME_FIELD = 'username'
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
from rest_framework import serializers
|
||||
from account import models
|
||||
from account.models import User
|
||||
from main.models import SiteSettings
|
||||
|
||||
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
|
|
@ -13,7 +14,19 @@ class RoleSerializer(serializers.ModelSerializer):
|
|||
]
|
||||
|
||||
|
||||
class _SiteSettingsSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SiteSettings
|
||||
fields = (
|
||||
'id',
|
||||
'subdomain',
|
||||
'country_code',
|
||||
)
|
||||
|
||||
|
||||
class BackUserSerializer(serializers.ModelSerializer):
|
||||
last_country = _SiteSettingsSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = (
|
||||
|
|
@ -37,11 +50,12 @@ class BackUserSerializer(serializers.ModelSerializer):
|
|||
'city',
|
||||
'locale',
|
||||
'last_ip',
|
||||
'last_country',
|
||||
)
|
||||
extra_kwargs = {
|
||||
'password': {'write_only': True},
|
||||
}
|
||||
read_only_fields = ('old_password', 'last_login', 'date_joined', 'city', 'locale', 'last_ip')
|
||||
read_only_fields = ('old_password', 'last_login', 'date_joined', 'city', 'locale', 'last_ip', 'last_country')
|
||||
|
||||
def create(self, validated_data):
|
||||
user = super().create(validated_data)
|
||||
|
|
|
|||
|
|
@ -103,6 +103,10 @@ class SiteSettings(ProjectBaseMixin):
|
|||
subdomain=self.subdomain,
|
||||
domain=settings.SITE_DOMAIN_URI)
|
||||
|
||||
@property
|
||||
def country_code(self):
|
||||
return self.country.code
|
||||
|
||||
|
||||
class Feature(ProjectBaseMixin, PlatformMixin):
|
||||
"""Feature model."""
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ from django.utils import translation, timezone
|
|||
from account.models import User
|
||||
from configuration.models import TranslationSettings
|
||||
from main.methods import determine_user_city
|
||||
from main.models import SiteSettings
|
||||
from translation.models import Language
|
||||
|
||||
|
||||
|
|
@ -64,14 +65,30 @@ def get_client_ip(request):
|
|||
|
||||
|
||||
def user_last_ip(get_response):
|
||||
"""Update user last ip address"""
|
||||
"""Update user last ip address and last country"""
|
||||
|
||||
def middleware(request):
|
||||
response = get_response(request)
|
||||
current_ip = get_client_ip(request)
|
||||
|
||||
country_code = request.COOKIES.get('country_code')
|
||||
current_site = SiteSettings.objects.by_country_code(country_code).first()
|
||||
if not current_site:
|
||||
current_site = SiteSettings.objects.filter(subdomain='www').first()
|
||||
|
||||
if request.user.is_authenticated:
|
||||
User.objects.filter(pk=request.user.pk).update(**{
|
||||
'last_ip': get_client_ip(request),
|
||||
})
|
||||
|
||||
payload = {}
|
||||
if request.user.last_ip != current_ip:
|
||||
payload.update({
|
||||
'last_ip': current_ip,
|
||||
})
|
||||
if request.user.last_country != current_site:
|
||||
payload.update({
|
||||
'last_country': current_site,
|
||||
})
|
||||
if payload:
|
||||
User.objects.filter(pk=request.user.pk).update(**payload)
|
||||
return response
|
||||
|
||||
return middleware
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user