User locale & city reading

This commit is contained in:
Kuroshini 2019-12-09 20:42:47 +03:00
parent 7910c98c8a
commit a2395b807e
3 changed files with 17 additions and 6 deletions

View File

@ -107,6 +107,10 @@ class User(AbstractUser):
email_confirmed = models.BooleanField(_('email status'), default=False) email_confirmed = models.BooleanField(_('email status'), default=False)
newsletter = models.NullBooleanField(default=True) newsletter = models.NullBooleanField(default=True)
old_id = models.IntegerField(null=True, blank=True, default=None) 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' EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username' USERNAME_FIELD = 'username'

View File

@ -33,12 +33,14 @@ class BackUserSerializer(serializers.ModelSerializer):
'email_confirmed', 'email_confirmed',
'newsletter', 'newsletter',
'roles', 'roles',
'password' 'password',
'city',
'locale',
) )
extra_kwargs = { 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): def create(self, validated_data):
user = super().create(validated_data) user = super().create(validated_data)

View File

@ -1,8 +1,9 @@
"""Custom middleware.""" """Custom middlewares."""
from django.utils import translation, timezone 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 translation.models import Language from translation.models import Language
@ -18,7 +19,11 @@ def user_last_visit(get_response):
def middleware(request): def middleware(request):
response = get_response(request) response = get_response(request)
if request.user.is_authenticated: 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 response
return middleware return middleware