Skip to content

Instantly share code, notes, and snippets.

@phpdude
Last active August 29, 2015 13:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phpdude/9022773 to your computer and use it in GitHub Desktop.
Save phpdude/9022773 to your computer and use it in GitHub Desktop.
Django user timezones
from django.conf import settings
from django.utils import timezone
import pygeoip
import pytz
db_loaded = False
db = None
def load_db():
global db, db_loaded
db = pygeoip.GeoIP(settings.GEOIP_DATABASE, pygeoip.MEMORY_CACHE)
db_loaded = True
def get_client_ip(request):
return request.META.get('REMOTE_ADDR')
class TimezoneMiddleware(object):
def process_request(self, request):
if request.user and request.user.is_authenticated() and \
request.user.timezone in pytz.all_timezones:
tzname = request.user.timezone
else:
if not db_loaded:
load_db()
tzname = db.time_zone_by_addr(get_client_ip(request))
if not tzname in pytz.all_timezones:
tzname = timezone.get_default_timezone()
timezone.activate(tzname)
request.timezone = tzname
def process_response(self, request, response):
timezone.deactivate()
return response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment