gault-millau/apps/utils/middleware.py
2019-12-09 20:42:47 +03:00

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