2010-04-19 528 views
39

如何檢測客戶端正在使用哪種瀏覽器類型。我有一個問題,我不得不要求人們使用不同的瀏覽器(Firefox)而不是IE瀏覽器。我如何獲得這些信息。如何在Django中檢測瀏覽器類型?

我知道http請求有這個信息(Header)。我將如何從Django框架中的view.py中獲取navigator.appName?

+3

你可以在一段時間曾經接受一個答案..... – KevinDTimm 2010-04-19 17:59:32

回答

68

您可以從請求對象中提取信息,像這樣:

request.META['HTTP_USER_AGENT'] 
+0

但是用java腳本,我可以通過執行document.write(「Browser Name:」+ navigator.appName)來獲得瀏覽器信息。這給了Microsoft Internet Explorer。沒有直接的方法來獲得它? 我的意思是我必須解析用戶代理和搜索MSIE。 – AlgoMan 2010-04-19 17:10:44

+3

在過去,我編寫了自定義中間件來處理諸如移動設備之類的瀏覽器檢測。如果你走這條路線,你真的需要小心你的緩存,否則事情會以奇怪的方式隨機失敗。如果你只需要爲IE做例外,最好使用IE條件註釋http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx。 – digitaldreamer 2010-04-19 18:46:16

+0

我認爲有條件的評論更簡單:)。感謝digitaldreamer – AlgoMan 2010-04-19 20:23:08

8

您可以查看「用戶代理字符串」並解析出這些值。

下面是相關的文檔,特別是在(HTTP_USER_AGENT):

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

+5

如何我們可以解析它嗎?這裏是字符串,瀏覽器信息遍佈整個地方。明白了嗎? 'Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537。36(KHTML,像Gecko)Chrome/33.0.1750.146 Safari/537.36' – Clayton 2014-03-13 09:57:33

11

有得到那個的多種方式完成。

最簡單的方法是@digitaldreamer推薦的方法。那就是你可以爲HTTP_USER_AGENT做一個元請求。

request.META['HTTP_USER_AGENT'] 

但我也建議你看看Django User Agents庫。

與PIP

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

安裝並配置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' 

用法非常簡單爲好。

user_agent屬性現在將被添加到請求,該請求可以在views.py使用:

# 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

this SO question,一個純HTML溶液使用conditional comments

DEF my_view(請求):

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

作爲警告由文檔:

從Internet Explorer 10開始,條件註釋不再支持標準模式 。使用功能檢測,爲未 瀏覽器

我在IE7中,IE9,IE10和IE11測試它支持的網站功能提供 有效的後備戰略。其中,並沒有工作,唯一的版本是IE10 ...

0

要檢測器是Internet Explorer 8或以上的IE:

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