Ho bisogno di rendering della pagina in modo diverso se è acessed da un iPhone/iPod Touch. Suppongo che l'informazione sia nell'oggetto di richiesta, ma quale sarebbe la sintassi?Come posso rilevare se l'app appengine è accessibile da un iphone/ipod touch?
risposta
Questa è la sintassi che cercavo, funziona con iPhone e iPod Touch:
uastring = self.request.headers.get('user_agent')
if "Mobile" in uastring and "Safari" in uastring:
# do iphone/ipod stuff
This article delinea alcuni modi di rilevare un iPhone attraverso controllando la variabile agente HTTP_USER_AGENT. A seconda di dove vuoi fare il check-in (livello HTML, Javascript, CSS, ecc.), Sono sicuro che puoi estrapolarlo nella tua app Python. Scusa, non sono un tipo pitone. 8^D
Controllare l'user agent. Sarà
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
Non sono sicuro di come fare questo con AppEngine, ma il codice PHP equivalente può essere trovato qui: http://www.mattcutts.com/blog/iphone-user-agent/
Beh, cambierà. I bit chiave che un'app dovrebbe verificare sono "iPhone" e "AppleWebKit": l'utilizzo di quella stringa esatta ti morderà nel culo la prossima volta che Safari riceverà un rilascio. – ceejayoz
No, i bit chiave sono Mobile/(qualcosa) e Safari/(qualcosa). "iPhone" non sarà presente su un iPod touch. –
Come si presenta un androide? Si basa sul webkit e non sarei sorpreso se mettesse Safari nella sua UA (chrome fa questo, iirc). –
Ecco come fare implementarlo come middleware in Django, assumendo che questo sia cosa stai usando su 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
Fondamentalmente cercare "iPhone" in HTTP_USER_AGENT. Tieni presente che iPod Touch ha una firma leggermente diversa rispetto all'iPhone, da cui la ricerca "iPhone" ampia anziché una ricerca più restrittiva.
se si sta utilizzando il quadro webapp di serie il programma utente sarà nell'istanza richiesta. Questo dovrebbe essere abbastanza buono:
if "iPhone" in request.headers["User-Agent"]:
# do iPhone logic
Credo che il codice dovrebbe dire self.request.headers [ "User-Agent"] Questa grande opera per me. Grazie – mcotton
La Using the Safari on iPhone User Agent String articolo sul sito web di Apple indicano i diversi agenti utente per iPhone e 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
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...')
ottengo 'AttributeError: oggetto 'WSGIRequest' non ha alcun attributo 'headers''. – noio