web-dev-qa-db-fra.com

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 demande http a cette information (En-tête). Comment vais-je obtenir le navigator.appName du view.py dans le framework Django? 

50
AlgoMan

Vous pouvez extraire ces informations de l'objet de requête de la manière suivante:

request.META['HTTP_USER_AGENT']
79
digitaldreamer

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 demande pour HTTP_USER_AGENT.

request.META['HTTP_USER_AGENT']

Mais je vous recommanderais également de consulter la bibliothèque Django User Agents

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 assez simple aussi. 

Un attribut user_agent va maintenant être ajouté à request, que vous pouvez utiliser dans views.py:

def my_view (demande):

# 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 attributes
request.user_agent.browser  # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
request.user_agent.browser.family  # returns 'Mobile Safari'
request.user_agent.browser.version  # returns (5, 1)
request.user_agent.browser.version_string   # returns '5.1'

# Operating System properties
request.user_agent.os  # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
request.user_agent.os.family  # returns 'iOS'
request.user_agent.os.version  # returns (5, 1)
request.user_agent.os.version_string  # returns '5.1'

# Device properties
request.user_agent.device  # returns Device(family='iPhone')
request.user_agent.device.family  # returns 'iPhone'
16
Ahmad Awais

Vous pouvez consulter la «chaîne de l'agent utilisateur» et analyser les valeurs.

Voici la documentation pertinente, spécifiquement sur (HTTP_USER_AGENT):

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

9
Alex Sexton

De cette SO question , une solution HTML pure utilisant des commentaires conditionnels :

<!--[if IE]> 
    <div>
       This site is not rendered properly with Internet Explorer. 
       Please use Firefox instead
    </div>
<![endif]-->

Comme indiqué par la documentation:

A partir d'Internet Explorer 10, les commentaires conditionnels ne sont plus pris en charge par le mode standard. Utiliser la détection de fonctionnalité pour fournir Stratégies de secours efficaces pour les fonctionnalités de site Web qui ne sont pas supporté par le navigateur

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

0
J0ANMM

Pour détecter si Internet Explorer 8 ou une version antérieure d'Internet Explorer est:

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