2009-03-05 16 views

Trả lời

8

Đây là cú pháp tôi đang tìm kiếm, làm việc với iPhone và iPod Touch:

uastring = self.request.headers.get('user_agent') 
if "Mobile" in uastring and "Safari" in uastring: 
    # do iphone/ipod stuff 
+2

Tôi nhận được 'AttributeError: 'WSGIRequest' đối tượng không có thuộc tính 'headers''. – noio

3

This article nêu một số cách để phát hiện iPhone thông qua bằng cách kiểm tra biến đại lý HTTP_USER_AGENT. Tùy thuộc vào nơi bạn muốn thực hiện kiểm tra tại (cấp HTML, Javascript, CSS, v.v.), tôi chắc chắn bạn có thể ngoại suy điều này vào ứng dụng Python của mình. Xin lỗi, tôi không phải là một anh chàng python. 8^D

1

Kiểm tra tác nhân người dùng. Nó sẽ là

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3

Tôi không chắc chắn làm thế nào để làm điều này với appengine, nhưng mã PHP tương đương có thể được tìm thấy ở đây: http://www.mattcutts.com/blog/iphone-user-agent/

+0

Vâng, nó sẽ thay đổi. Các bit chính mà ứng dụng nên kiểm tra là 'iPhone' và 'AppleWebKit' - sử dụng chuỗi chính xác đó sẽ cắn bạn trong ass vào lần tiếp theo Safari nhận được bản phát hành điểm. – ceejayoz

+0

Không, các bit chính là Mobile/(cái gì đó) và Safari/(cái gì đó). "iPhone" sẽ không có trên iPod touch. –

+1

Android hiển thị như thế nào? Dựa trên webkit của nó, và tôi sẽ không ngạc nhiên nếu nó đặt Safari trong UA của nó (chrome làm điều này, iirc). –

2

Dưới đây là cách thực hiện thực hiện nó như middleware trong Django, giả sử đó là những gì bạn đang sử dụng trên 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 

Về cơ bản hãy tìm 'iPhone' trong HTTP_USER_AGENT. Lưu ý rằng iPod Touch có chữ ký hơi khác so với iPhone, do đó tìm kiếm 'iPhone' rộng thay vì tìm kiếm hạn chế hơn.

2

nếu bạn đang sử dụng khung webapp tiêu chuẩn, tác nhân người dùng sẽ ở trong trường hợp yêu cầu. Điều này cần được đủ tốt:

if "iPhone" in request.headers["User-Agent"]: 
    # do iPhone logic 
+2

Tôi nghĩ rằng mã của bạn nên nói self.request.headers ["User-Agent"] Điều này làm việc tuyệt vời cho tôi. Cảm ơn – mcotton

3

Các Using the Safari on iPhone User Agent String bài viết trên trang web của apple chỉ các đại lý người dùng khác nhau dành cho iPhone và 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 
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...') 
Các vấn đề liên quan