如果通过iphone / ipod touch访问,我需要以不同的方式呈现页面。我想信息是在请求对象中,但语法是什么?
答案 0 :(得分:8)
这是我正在寻找的语法,适用于iphone和ipod touch:
uastring = self.request.headers.get('user_agent')
if "Mobile" in uastring and "Safari" in uastring:
# do iphone / ipod stuff
答案 1 :(得分:3)
This article通过检查HTTP_USER_AGENT代理变量,概述了检测iPhone的几种方法。根据您要检查的位置(HTML级别,Javascript,CSS等),我确信您可以将其推断到您的Python应用程序中。对不起,我不是蟒蛇人。 8 ^ d
答案 2 :(得分:3)
苹果网站上的Using the Safari on iPhone User Agent String文章指出了iPhone和iPod touch的不同用户代理。
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/XXXXX Safari/525.20
答案 3 :(得分:2)
以下是如何在Django中将其实现为中间件,假设这是您在appengine上使用的内容。
class DetectiPhone(object):
def process_request(self, request):
if 'HTTP_USER_AGENT' in request.META and request.META['HTTP_USER_AGENT'].find('(iPhone') >= 0:
request.META['iPhone'] = True
基本上在HTTP_USER_AGENT中查找“iPhone”。请注意,iPod Touch与iPhone的签名略有不同,因此广泛的“iPhone”搜索而不是更严格的搜索。
答案 4 :(得分:2)
如果您使用标准的webapp框架,则用户代理将位于请求实例中。这应该足够好了:
if "iPhone" in request.headers["User-Agent"]:
# do iPhone logic
答案 5 :(得分:1)
检查用户代理。它将是
Mozilla / 5.0(iPhone; U; CPU,如Mac OS X; en)AppleWebKit / 420 +(KHTML,类似Gecko)版本/ 3.0 Mobile / 1A543a Safari / 419.3
我不知道如何使用appengine执行此操作,但可以在此处找到等效的PHP代码:http://www.mattcutts.com/blog/iphone-user-agent/
答案 6 :(得分:1)
import os
class MainPage(webapp.RequestHandler):
@login_required
def get(self):
userAgent = os.environ['HTTP_USER_AGENT']
if userAgent.find('iPhone') > 0:
self.response.out.write('iPhone support is coming soon...')
else:
self.response.out.write('Hey... you are not from iPhone...')