2010-04-19 11 views
39

Jak wykryć typ przeglądarki, której używa klient. Mam problem polegający na tym, że muszę prosić ludzi o używanie innej przeglądarki (Firefox) zamiast IE. Jak mogę uzyskać te informacje.Jak wykryć typ przeglądarki w Django?

Wiem, że żądanie http zawiera tę informację (nagłówek). Jak uzyskać plik navigator.appName z pliku view.py w strukturze Django?

+3

można przyjąć odpowiedź raz na jakiś czas ..... – KevinDTimm

Odpowiedz

68

można wyodrębnić te informacje od obiektu żądania tak:

request.META['HTTP_USER_AGENT'] 
+0

Ale ze skryptem java mogę uzyskać informacje o przeglądarce, robiąc tylko document.write ("Nazwa przeglądarki:" + navigator.appName); co daje Microsoft Internet Explorer. Nie ma bezpośredniej metody zdobywania go? Mam na myśli, że muszę przetworzyć agenta użytkownika i wyszukać MSIE. – AlgoMan

+3

W przeszłości napisałem niestandardowe oprogramowanie pośredniczące do obsługi wykrywania przeglądarki w takich urządzeniach jak telefon komórkowy. Jeśli pójdziesz tą trasą, naprawdę musisz zachować ostrożność przy buforowaniu, bo inaczej losy zawiodą w dziwny sposób. Jeśli potrzebujesz tylko wyjątków dla IE, najlepiej użyć komentarzy warunkowych IE http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx. – digitaldreamer

+0

Myślę, że warunkowe komentarze są prostsze :). Dzięki digitaldreamer – AlgoMan

11

Istnieje wiele sposobów, że uzyskanie Gotowe.

Najprostszym sposobem jest zalecany przez @digitaldreamer. To możesz zrobić meta request dla HTTP_USER_AGENT.

request.META['HTTP_USER_AGENT'] 

Ale polecam również zapoznać się z biblioteką Django User Agents.

zainstalować go z pip

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

i skonfigurować settings.py:

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' 

Użycie jest bardzo proste, jak również.

Atrybut user_agent zostanie dodany do żądania, które można wykorzystać w 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' 
0

Od this SO question, czystym rozwiązaniem html za pomocą conditional comments:

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

Jak ostrzegł w dokumentacji:

Począwszy od wersji Internet Explorer 10, komentarze warunkowe nie są już obsługiwane w trybie standardowym przez . Użyj funkcji wykrywania zapewnić skutecznych strategii zastępczych dla funkcji strony internetowej, które nie są obsługiwane przez przeglądarce

I przetestowane w IE7, IE9, IE10 i IE11. Jedyna wersja, gdzie nie udało się IE10 ...

0

Aby wykryć, czy Internet Explorer 8 lub starszy IE:

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