Comment détecter le type de navigateur dans Django?

Comment puis-je détecter le type de navigateur utilisé par le client? J’ai un problème où je dois demander aux gens d’utiliser un navigateur différent (Firefox) au lieu d’IE. Comment puis-je obtenir cette information?

Je sais que la requête http a cette information (en-tête). Comment vais-je obtenir navigator.appName à partir de view.py dans le framework Django?

Vous pouvez extraire cette information de l’object de requête comme suit:

request.META['HTTP_USER_AGENT'] 

Il y a plusieurs façons de le faire.

Le moyen le plus simple est ce que @digitaldreamer a recommandé. C’est-à-dire que vous pouvez faire une méta-requête pour HTTP_USER_AGENT .

 request.META['HTTP_USER_AGENT'] 

Mais je vous recommande également de consulter la bibliothèque des agents utilisateurs de Django .

Installez-le avec pip

 pip install pyyaml ua-parser user-agents pip install django-user-agents 

Et configurez settings.py :

 MIDDLEWARE_CLASSES = ( # other middlewares... 'django_user_agents.middleware.UserAgentMiddleware', ) INSTALLED_APPS = ( # Other apps... 'django_user_agents', ) # Cache backend is optional, but recommended to speed up user agent parsing CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } # Name of cache backend to cache user agents. If it not specified default # cache alias will be used. Set to `None` to disable caching. USER_AGENTS_CACHE = 'default' 

L’utilisation est très simple aussi.

Un atsortingbut user_agent sera désormais ajouté à la requête, que vous pourrez utiliser dans views.py:

def my_view (request):

 # Let's assume that the visitor uses an iPhone... request.user_agent.is_mobile # returns True request.user_agent.is_tablet # returns False request.user_agent.is_touch_capable # returns True request.user_agent.is_pc # returns False request.user_agent.is_bot # returns False # Accessing user agent's browser atsortingbutes request.user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_ssortingng='5.1') request.user_agent.browser.family # returns 'Mobile Safari' request.user_agent.browser.version # returns (5, 1) request.user_agent.browser.version_ssortingng # returns '5.1' # Operating System properties request.user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_ssortingng='5.1') request.user_agent.os.family # returns 'iOS' request.user_agent.os.version # returns (5, 1) request.user_agent.os.version_ssortingng # returns '5.1' # Device properties request.user_agent.device # returns Device(family='iPhone') request.user_agent.device.family # returns 'iPhone' 

Vous pouvez consulter la chaîne de l’agent utilisateur et parsingr les valeurs.

Voici les documents pertinents, en particulier sur ( HTTP_USER_AGENT ):

http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META

A partir de cette question SO , une solution html pure utilisant des commentaires conditionnels :

  

Comme averti par la documentation:

À partir d’Internet Explorer 10, les commentaires conditionnels ne sont plus pris en charge par le mode standard. Utiliser la détection de fonctionnalités pour fournir des stratégies de secours efficaces pour les fonctionnalités du site Web qui ne sont pas sockets en charge par le navigateur

Je l’ai testé dans IE7, IE9, IE10 et IE11. La seule version où cela ne fonctionnait pas était IE10 …

Pour détecter si Internet Explorer 8 ou plus ancien IE:

 is_IE_8_or_lower = re.findall(r'MSIE [2-8]',request.request.META['HTTP_USER_AGENT'])