如何检测iphone / ipod touch是否正在访问我的appengine应用程序?

时间:2009-03-05 23:46:27

标签: iphone python google-app-engine web-applications

如果通过iphone / ipod touch访问,我需要以不同的方式呈现页面。我想信息是在请求对象中,但语法是什么?

7 个答案:

答案 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...')