Question django 1.4 comment obtenir automatiquement le fuseau horaire de l'utilisateur à partir du client


J'aimerais savoir s'il existe un moyen de récupérer automatiquement le fuseau horaire de l'utilisateur à partir du client. Surtout lors de la connexion.

J'ai essayé d'ajouter ceci dans la page de connexion (en utilisant auth.login):

{% get_current_timezone as TIME_ZONE %}

puis ajoutez ceci dans le formulaire de connexion

<input type="hidden" name="next" value="/redirect/?tz={{ TIME_ZONE }}">

mais tz est toujours le fuseau horaire du serveur.


13
2018-04-19 20:09


origine


Réponses:


Du Documentation:

Sélection du fuseau horaire actuel

Le fuseau horaire actuel est le   équivalent de la locale actuelle pour les traductions. Cependant, il n'y a pas   équivalent de l'en-tête HTTP Accept-Language que Django pourrait utiliser pour   déterminer automatiquement le fuseau horaire de l'utilisateur. Au lieu de cela, Django fournit   fonctions de sélection de fuseau horaire. Utilisez-les pour construire le fuseau horaire   logique de sélection qui a du sens pour vous.

Vous pouvez essayer de définir un cookie de fuseau horaire via javascript en utilisant getTimezoneOffset fonction ou essayez de faire de la magie geoip et figurez fuseau horaire par emplacement. Le moyen le plus fiable serait probablement de demander directement à l'utilisateur et de sauvegarder ces informations dans le profil / la session utilisateur.


11
2018-04-19 20:13



Je l'ai encore simplifié et vous pouvez y brancher: https://github.com/Miserlou/django-easy-timezones ou http://gun.io/blog/django-easy-timezones/


13
2017-07-17 09:21



Je cherchais quelque chose hier. En fin de compte, j'ai fini par mettre en place une application Django selon les suggestions de BluesRockAddict (par exemple, utilisez getTimezoneOffset):

https://github.com/adamcharnock/django-tz-detect

J'espère que quelqu'un trouve cela utile.


8
2018-06-20 08:38



Il y a une belle application pour Django pour activer le fuseau horaire https://pypi.python.org/pypi/django-visitor-information-middleware/0.1.0. Qui a deux middleware

TimezoneMiddleware

Le middleware active un fuseau horaire pour un utilisateur authentifié.

VisitorInformationMiddleware

Ce middleware ajoute les clés suivantes au dictionnaire request.visitor:

pays - pays dans lequel se trouve le visiteur

ville - ville dans laquelle se trouve le visiteur

location.timezone - le fuseau horaire utilisé dans l'emplacement visiteur est basé dans

location.unit_system - le système d'unité utilisé dans l'emplacement visiteur est basé dans

user.timezone - fuseau horaire de l'utilisateur actuellement authentifié

user.unit_system - système unitaire de l'utilisateur actuellement authentifié.

cookie_notice - True si un avis de consentement de cookie doit être affiché pour le visiteur actuel.

Note: Location of the user is determined based on the user's IP address.

2
2018-04-08 13:12



Je crée actuellement une classe de middleware (suivant la documentation de Django) dans laquelle je me base sur la base de données geoip de MaxMind (http://dev.maxmind.com/geoip/legacy/geolite) et GeoDjango (https://docs.djangoproject.com/en/1.5/ref/contrib/gis/) pour retracer le code pays de l'utilisateur, puis définir dynamiquement le fuseau horaire à l'aide de pytz:

class TimezoneMiddleware(object):


    def __getUserTimeZone(self, request):
        info = IPResolver(request).getGeoInfo()
        return pytz.country_timezones[info['country_code']][0]


    def process_request(self, request):
        try:
            tz = self.__getUserTimeZone(request)
            timezone.activate(tz)
            logger.debug('Time zone "%s" activated' % str(tz))
        except Exception as e:
            logger.error('Unable to set timezone: %s' % str(e))

pytz.country_timezones retourne une collection de fuseaux horaires disponibles pour le pays donné, donc je choisis essentiellement le premier retourné.

IPResolver est une classe d'utilité personnelle, j'ai écrit en plus de django.contrib.gis.utils.GeoIP


0
2018-06-20 09:14