Im Junior django dev。我需要檢測三種類型的設備,平板電腦,移動設備或桌面設備。我發現檢測到的手機腳本(https://github.com/macgera/macgera/blob/master/middleware.py),但我如何檢測手機,平板電腦和桌面?在Django上檢測手機,平板電腦或桌面
謝謝!
Im Junior django dev。我需要檢測三種類型的設備,平板電腦,移動設備或桌面設備。我發現檢測到的手機腳本(https://github.com/macgera/macgera/blob/master/middleware.py),但我如何檢測手機,平板電腦和桌面?在Django上檢測手機,平板電腦或桌面
謝謝!
如果您想要一些快速簡單的解決方案,您可以嘗試使用handset detection's javascript,以便創建簡單的重定向規則。
看看MobileESP。它最近已經被移植到Django web應用框架的Python中。它可以檢測各種類別的設備(包括smatphones,平板電腦)。
根據您之前使用移動偵測功能的中間件,我提出以下建議:
拿起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
(對任何移動設備的任何)。
我正在尋找類似的東西,我偶然發現了django-mobile,它確實如此。 (我知道這個問題很古老,發佈它的人可能是現在的高級Django開發者,但也許這可以幫助人們尋找那些日子)。
我可以通過它檢測/區分'ios','android','windows phone'嗎? – andi 2014-04-04 11:37:32
@andi - 是的,你可以用它來區分;看看mdetect python代碼,有像'detectIphoneOrIpod','detectAndroidPhone'或'detectWindowsPhone'這樣的方法,可以將它們存儲到請求對象的布爾變量中。它的評論很好,所以確保你正在使用你需要的檢測方法。 – 2014-04-04 21:24:20
工作得很好,謝謝Adam。爲什麼沒有選擇答案? – learnJQueryUI 2014-05-18 11:20:25