49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
"""Custom middlewares."""
|
|
from django.utils import translation, timezone
|
|
|
|
from account.models import User
|
|
from configuration.models import TranslationSettings
|
|
from main.methods import determine_user_city
|
|
from translation.models import Language
|
|
|
|
|
|
def get_locale(cookie_dict):
|
|
return cookie_dict.get('locale')
|
|
|
|
|
|
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:
|
|
User.objects.filter(pk=request.user.pk).update(**{
|
|
'last_login': timezone.now(),
|
|
'locale': request.locale,
|
|
'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
|
|
locale = get_locale(cookie_dict)
|
|
# todo: don't use DB!!! Use cache
|
|
if not Language.objects.filter(locale=locale).exists():
|
|
locale = TranslationSettings.get_solo().default_language
|
|
translation.activate(locale)
|
|
request.locale = locale
|
|
|
|
# processing country country cookie
|
|
country_code = get_country_code(cookie_dict)
|
|
request.country_code = country_code
|
|
|
|
response = get_response(request)
|
|
return response
|
|
return middleware
|