Comment détecter Type de navigateur dans Django?

Comment puis-je détecter quel type de navigateur le client utilise. J'ai un problème lorsque je demande aux gens d'utiliser autre navigateur (Firefox) au lieu de IE. Comment puis-je obtenir cette information.

je sais que la requête http contient cette information (en-tête). Comment vais-je obtenir le navigateur.appName de la view.py dans le cadre de Django ?

46
demandé sur x0x 2010-04-19 20:56:36

5 réponses

vous pouvez extraire cette information de l'objet request comme suit:

request.META['HTTP_USER_AGENT']
73
répondu digitaldreamer 2010-04-19 17:02:30

il y a plusieurs façons d'y arriver.

la façon la plus facile est ce que @digitaldreamer recommande. C'est que vous pouvez faire une méta demande de HTTP_USER_AGENT .

request.META['HTTP_USER_AGENT']

mais je vous recommande aussi de jeter un oeil à la bibliothèque Django User Agents .

installez-le avec pip

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

et configurer 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 de

est également assez simple.

attribut" a user_agent sera désormais ajouté à la requête, 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'
14
répondu Ahmad Awais 2018-03-18 16:42:17

vous pouvez regarder dans la 'chaîne d'agent utilisateur' et analyser les valeurs.

Voici les documents pertinents, spécifiquement sur ( HTTP_USER_AGENT ):

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

9
répondu Alex Sexton 2010-04-19 17:00:50

à Partir de cela DONC, la question , un pur html solution à l'aide de commentaires conditionnels :

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

comme indiqué dans la documentation:

à partir D'Internet Explorer 10, les commentaires conditionnels ne sont plus prise en charge par le mode standard. Utiliser la détection des caractéristiques pour fournir stratégies de repli efficaces pour les fonctionnalités du site web qui ne sont pas pris en charge par le navigateur

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

0
répondu J0ANMM 2017-05-23 12:34:34

Pour détecter si c'est internet explorer 8 ou plus, c'est à dire:

is_IE_8_or_lower = re.findall(r'MSIE [2-8]',request.request.META['HTTP_USER_AGENT'])
0
répondu Cubiczx 2018-03-02 09:40:04