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',
|
list_filter = ('is_active', 'is_staff', 'is_superuser', 'email_confirmed',
|
||||||
'groups',)
|
'groups',)
|
||||||
search_fields = ('email', 'first_name', 'last_name')
|
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 = (
|
fieldsets = (
|
||||||
(None, {'fields': ('email', 'password',)}),
|
(None, {'fields': ('email', 'password',)}),
|
||||||
(_('Personal info'), {
|
(_('Personal info'), {
|
||||||
|
|
@ -36,7 +36,7 @@ class UserAdmin(BaseUserAdmin):
|
||||||
'newsletter',
|
'newsletter',
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'last_ip')}),
|
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'last_ip', 'last_country')}),
|
||||||
(_('Permissions'), {
|
(_('Permissions'), {
|
||||||
'fields': (
|
'fields': (
|
||||||
'is_active', 'is_staff', 'is_superuser', 'email_confirmed',
|
'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,
|
city = models.TextField(default=None, blank=True, null=True,
|
||||||
verbose_name=_('User last visited from city'))
|
verbose_name=_('User last visited from city'))
|
||||||
last_ip = models.GenericIPAddressField(_('last IP address'), blank=True, null=True, default=None)
|
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'
|
EMAIL_FIELD = 'email'
|
||||||
USERNAME_FIELD = 'username'
|
USERNAME_FIELD = 'username'
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from account import models
|
from account import models
|
||||||
from account.models import User
|
from account.models import User
|
||||||
|
from main.models import SiteSettings
|
||||||
|
|
||||||
|
|
||||||
class RoleSerializer(serializers.ModelSerializer):
|
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):
|
class BackUserSerializer(serializers.ModelSerializer):
|
||||||
|
last_country = _SiteSettingsSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = (
|
fields = (
|
||||||
|
|
@ -37,11 +50,12 @@ class BackUserSerializer(serializers.ModelSerializer):
|
||||||
'city',
|
'city',
|
||||||
'locale',
|
'locale',
|
||||||
'last_ip',
|
'last_ip',
|
||||||
|
'last_country',
|
||||||
)
|
)
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'password': {'write_only': True},
|
'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):
|
def create(self, validated_data):
|
||||||
user = super().create(validated_data)
|
user = super().create(validated_data)
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,10 @@ class SiteSettings(ProjectBaseMixin):
|
||||||
subdomain=self.subdomain,
|
subdomain=self.subdomain,
|
||||||
domain=settings.SITE_DOMAIN_URI)
|
domain=settings.SITE_DOMAIN_URI)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def country_code(self):
|
||||||
|
return self.country.code
|
||||||
|
|
||||||
|
|
||||||
class Feature(ProjectBaseMixin, PlatformMixin):
|
class Feature(ProjectBaseMixin, PlatformMixin):
|
||||||
"""Feature model."""
|
"""Feature model."""
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ from django.utils import translation, timezone
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from configuration.models import TranslationSettings
|
from configuration.models import TranslationSettings
|
||||||
from main.methods import determine_user_city
|
from main.methods import determine_user_city
|
||||||
|
from main.models import SiteSettings
|
||||||
from translation.models import Language
|
from translation.models import Language
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -64,14 +65,30 @@ def get_client_ip(request):
|
||||||
|
|
||||||
|
|
||||||
def user_last_ip(get_response):
|
def user_last_ip(get_response):
|
||||||
"""Update user last ip address"""
|
"""Update user last ip address and last country"""
|
||||||
|
|
||||||
def middleware(request):
|
def middleware(request):
|
||||||
response = get_response(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:
|
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 response
|
||||||
|
|
||||||
return middleware
|
return middleware
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user