2012-02-02 349 views
18

Im Junior django dev。我需要檢測三種類型的設備,平板電腦,移動設備或桌面設備。我發現檢測到的手機腳本(https://github.com/macgera/macgera/blob/master/middleware.py),但我如何檢測手機,平板電腦和桌面?在Django上檢測手機,平板電腦或桌面

謝謝!

回答

1

如果您想要一些快速簡單的解決方案,您可以嘗試使用handset detection's javascript,以便創建簡單的重定向規則。

5

看看MobileESP。它最近已經被移植到Django web應用框架的Python中。它可以檢測各種類別的設備(包括smatphones,平板電腦)。

33

根據您之前使用移動偵測功能的中間件,我提出以下建議:

拿起Python port of MobileESP(source code here)(感謝Mariusz Miesiak的建議),並把它放到一個在基地命名mobileesp文件夾您的項目(其中manage.py是)。拋出一個空白的__init__.py文件,以便Python將它看作一個包。

繼續前進,創造一個新的文件,middleware.py,在該目錄中,並用填充:

import re 
from mobileesp import mdetect 

class MobileDetectionMiddleware(object): 
    """ 
    Useful middleware to detect if the user is 
    on a mobile device. 
    """ 
    def process_request(self, request): 
     is_mobile = False 
     is_tablet = False 
     is_phone = False 

     user_agent = request.META.get("HTTP_USER_AGENT") 
     http_accept = request.META.get("HTTP_ACCEPT") 
     if user_agent and http_accept: 
      agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept) 
      is_tablet = agent.detectTierTablet() 
      is_phone = agent.detectTierIphone() 
      is_mobile = is_tablet or is_phone or agent.detectMobileQuick() 

     request.is_mobile = is_mobile 
     request.is_tablet = is_tablet 
     request.is_phone = is_phone 

最後,請務必在MIDDLEWARE_CLASSES'mobileesp.middleware.MobileDetectionMiddleware',在你的設置文件。

有了到位,在你的意見(或任何地方,你有一個請求對象),您可以檢查is_phone(任何現代的智能手機),is_tablet(現代片)或is_mobile(對任何移動設備的任何)。

+0

我可以通過它檢測/區分'ios','android','windows phone'嗎? – andi 2014-04-04 11:37:32

+2

@andi - 是的,你可以用它來區分;看看mdetect python代碼,有像'detectIphoneOrIpod','detectAndroidPhone'或'detectWindowsPhone'這樣的方法,可以將它們存儲到請求對象的布爾變量中。它的評論很好,所以確保你正在使用你需要的檢測方法。 – 2014-04-04 21:24:20

+0

工作得很好,謝謝Adam。爲什麼沒有選擇答案? – learnJQueryUI 2014-05-18 11:20:25

0

我正在尋找類似的東西,我偶然發現了django-mobile,它確實如此。 (我知道這個問題很古老,發佈它的人可能是現在的高級Django開發者,但也許這可以幫助人們尋找那些日子)。

相關問題