2010-04-19 18 views
39

मैं कैसे पता लगा सकता हूं कि क्लाइंट किस ब्राउज़र प्रकार का उपयोग कर रहा है। मुझे एक समस्या है जहां मुझे लोगों को IE के बजाय अलग-अलग ब्राउज़र (फ़ायरफ़ॉक्स) का उपयोग करने के लिए कहा जाना है। मैं यह जानकारी कैसे प्राप्त कर सकता हूं।Django में ब्राउज़र प्रकार का पता कैसे लगाएं?

मुझे पता है कि http अनुरोध में यह जानकारी है (हैडर)। मैं Django फ्रेमवर्क में view.py से navigator.appName कैसे प्राप्त करूं?

+3

आप एक समय में एक बार एक जवाब को स्वीकार कर सकता है ..... – KevinDTimm

उत्तर

68

तुम इतनी तरह अनुरोध वस्तु की जानकारी को निकाल सकते हैं:

request.META['HTTP_USER_AGENT'] 
+0

लेकिन जावा स्क्रिप्ट के साथ मैं सिर्फ दस्तावेज़ कर लिखकर ब्राउज़र की जानकारी प्राप्त कर सकता हूं। लिखना ("ब्राउज़र का नाम:" + navigator.appName); जो Microsoft इंटरनेट एक्सप्लोरर देता है। इसे पाने का कोई सीधा तरीका नहीं है? मेरा मतलब है कि मुझे उपयोगकर्ता एजेंट को पार्स करना और एमएसआईई की खोज करना है। – AlgoMan

+3

अतीत में मैंने मोबाइल जैसे सामानों के लिए ब्राउज़र पहचान को संभालने के लिए कस्टम मिडलवेयर लिखा है। यदि आप इस मार्ग पर जाते हैं तो आपको वास्तव में अपने कैशिंग के साथ सावधान रहना होगा या अन्य चीजें अजीब तरीके से यादृच्छिक रूप से असफल हो जाएंगी। यदि आपको केवल आईई के लिए अपवाद बनाने की आवश्यकता है तो आईई सशर्त टिप्पणियों का उपयोग करना सबसे अच्छा है http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx। – digitaldreamer

+0

मुझे लगता है कि सशर्त टिप्पणियां सरल हैं :)। धन्यवाद digitaldreamer – AlgoMan

8

आप 'उपयोगकर्ता एजेंट स्ट्रिंग' में देख सकते हैं और मानों को पार्स कर सकते हैं।

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

+5

कैसे क्या हम इसे पार्स कर सकते हैं? यहां स्ट्रिंग है, और ब्राउजर जानकारी पूरी जगह पर है। बिंदु मिला? 'मोज़िला/5.0 (विंडोज एनटी 6.1; WOW64) AppleWebKit/537।36 (केएचटीएम, जैसे गेको) क्रोम/33.0.1750.146 सफारी/537.36' – Clayton

11

कि हो रही के कई तरीके हैं

यहाँ प्रासंगिक डॉक्स, विशेष रूप से पर (HTTP_USER_AGENT) है किया हुआ।

सबसे आसान तरीका @digitaldreamer की सिफारिश की गई है। यही है कि आप HTTP_USER_AGENT के लिए मेटा अनुरोध कर सकते हैं।

request.META['HTTP_USER_AGENT'] 

लेकिन मैं यह भी Django User Agents पुस्तकालय पर एक नज़र लेने के लिए आप की सिफारिश करेंगे।

पिप

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' 

प्रयोग के साथ-साथ बहुत सरल है।

# 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, से conditional comments का उपयोग कर एक शुद्ध एचटीएमएल समाधान:

डीईएफ़ my_view (अनुरोध):

एक user_agent विशेषता अब जो आप views.py में उपयोग कर सकते हैं अनुरोध करने के लिए जोड़ दिया जाएगा,:

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

प्रलेखन ने चेतावनी दी है:

+०१२३५१६४१०६१

इंटरनेट एक्सप्लोरर 10 के रूप में, सशर्त टिप्पणियां मानक मोड द्वारा समर्थित नहीं हैं। कि ब्राउज़र

मैं IE7, IE9, IE10 और IE11 में यह परीक्षण किया द्वारा समर्थित नहीं कर रहे हैं वेबसाइट सुविधाओं के लिए प्रभावी वापस आने रणनीतियों प्रदान करने के लिए सुविधा का पता लगाने का उपयोग करें। केवल संस्करण, जहां इस काम नहीं किया IE10 ...

0

था अगर इंटरनेट एक्सप्लोरर 8 या उससे अधिक है आईई का पता लगाने के लिए:

is_IE_8_or_lower = re.findall(r'MSIE [2-8]',request.request.META['HTTP_USER_AGENT']) 
संबंधित मुद्दे