From a2395b807e6d6bb6f1a80365b22dcc89a9a202a0 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Mon, 9 Dec 2019 20:42:47 +0300 Subject: [PATCH] User locale & city reading --- apps/account/models.py | 4 ++++ apps/account/serializers/back.py | 8 +++++--- apps/utils/middleware.py | 11 ++++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/account/models.py b/apps/account/models.py index 8f6c6233..70a3cd69 100644 --- a/apps/account/models.py +++ b/apps/account/models.py @@ -107,6 +107,10 @@ class User(AbstractUser): email_confirmed = models.BooleanField(_('email status'), default=False) newsletter = models.NullBooleanField(default=True) old_id = models.IntegerField(null=True, blank=True, default=None) + locale = models.CharField(max_length=10, blank=True, default=None, null=True, + verbose_name=_('User last used locale')) + city = models.TextField(default=None, blank=True, null=True, + verbose_name=_('User last visited from city')) EMAIL_FIELD = 'email' USERNAME_FIELD = 'username' diff --git a/apps/account/serializers/back.py b/apps/account/serializers/back.py index 15e0684e..01889411 100644 --- a/apps/account/serializers/back.py +++ b/apps/account/serializers/back.py @@ -33,12 +33,14 @@ class BackUserSerializer(serializers.ModelSerializer): 'email_confirmed', 'newsletter', 'roles', - 'password' + 'password', + 'city', + 'locale', ) extra_kwargs = { - 'password': {'write_only': True} + 'password': {'write_only': True}, } - read_only_fields = ('old_password', 'last_login', 'date_joined') + read_only_fields = ('old_password', 'last_login', 'date_joined', 'city', 'locale') def create(self, validated_data): user = super().create(validated_data) diff --git a/apps/utils/middleware.py b/apps/utils/middleware.py index 1a421322..fa9f9950 100644 --- a/apps/utils/middleware.py +++ b/apps/utils/middleware.py @@ -1,8 +1,9 @@ -"""Custom middleware.""" +"""Custom middlewares.""" from django.utils import translation, timezone -from account.models import User +from account.models import User from configuration.models import TranslationSettings +from main.methods import determine_user_city from translation.models import Language @@ -18,7 +19,11 @@ def user_last_visit(get_response): def middleware(request): response = get_response(request) if request.user.is_authenticated: - User.objects.filter(pk=request.user.pk).update(last_login=timezone.now()) + User.objects.filter(pk=request.user.pk).update(**{ + 'last_login': timezone.now(), + 'locale': request.locale, + 'city': determine_user_city(request), + }) return response return middleware