Hoe het browsertype in Django te detecteren?

Hoe kan ik detecteren welk browsertype de client gebruikt. Ik heb een probleem waarbij ik mensen moet vragen om een ​​andere browser (Firefox) te gebruiken in plaats van IE. Hoe kan ik deze informatie krijgen.

Ik weet dat het http-verzoek deze informatie heeft (koptekst). Hoe krijg ik de navigator.appName van de view.py in het Django-framework?


Antwoord 1, autoriteit 100%

U kunt die informatie als volgt uit het verzoekobject halen:

request.META['HTTP_USER_AGENT']

Antwoord 2, autoriteit 32%

Er zijn meerdere manieren om dat voor elkaar te krijgen.

De gemakkelijkste manier is wat @digitaldreamer heeft aanbevolen. Dat wil zeggen dat u een metaverzoek kunt indienen voor HTTP_USER_AGENT.

request.META['HTTP_USER_AGENT']

Maar ik zou je ook aanraden om een ​​kijkje te nemen in de Django User Agents-bibliotheek.

Installeer het met pip

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

En configureer 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'

Het gebruik is ook vrij eenvoudig.

Er wordt nu een user_agent-kenmerk toegevoegd aan het verzoek, dat u kunt gebruiken in 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 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'

Antwoord 3, autoriteit 8%

Je kunt in de ‘user agent string’ kijken en de waarden ontleden.

Hier zijn de relevante documenten, specifiek over (HTTP_USER_AGENT):

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


Antwoord 4

Van deze SO-vraag, een pure html-oplossing met voorwaardelijke opmerkingen:

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

Zoals gewaarschuwd door de documentatie:

Vanaf Internet Explorer 10 zijn voorwaardelijke opmerkingen niet meer mogelijk
ondersteund door de standaardmodus. Gebruik functiedetectie om te voorzien:
effectieve fallback-strategieën voor websitefuncties die dat niet zijn
ondersteund door de browser

Ik heb het getest in IE7, IE9, IE10 en IE11. De enige versie waar dit niet werkte was IE10…


Antwoord 5

Om te detecteren of Internet Explorer 8 of ouder IE is:

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

Other episodes