En función de su uso previo de detección de middleware móvil, lo recomiendo lo siguiente:
Recoger los Python port of MobileESP(source code here) (gracias a Mariusz Miesiak por la recomendación) y colocarlo en una carpeta llamada mobileesp
en la base de su proyecto (donde manage.py
es). Inserte un archivo __init__.py
en blanco para que Python lo vea como un paquete.
Seguir adelante y crear un nuevo archivo, middleware.py
, en ese directorio, y llenarlo con:
import re
from mobileesp import mdetect
class MobileDetectionMiddleware(object):
"""
Useful middleware to detect if the user is
on a mobile device.
"""
def process_request(self, request):
is_mobile = False
is_tablet = False
is_phone = False
user_agent = request.META.get("HTTP_USER_AGENT")
http_accept = request.META.get("HTTP_ACCEPT")
if user_agent and http_accept:
agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
is_tablet = agent.detectTierTablet()
is_phone = agent.detectTierIphone()
is_mobile = is_tablet or is_phone or agent.detectMobileQuick()
request.is_mobile = is_mobile
request.is_tablet = is_tablet
request.is_phone = is_phone
Por último, asegúrese de incluir en 'mobileesp.middleware.MobileDetectionMiddleware',
MIDDLEWARE_CLASSES
en su archivo de configuración.
Con esto en su lugar, en su opinión (o cualquier lugar que tenga un objeto de solicitud) se puede comprobar por is_phone
(para cualquier smartphones modernos), is_tablet
(para tabletas modernas) o is_mobile
(para cualquier dispositivo móvil en absoluto).
¿puedo detectar/distinguir con él 'ios',' android', 'windows phone'? – andi
@andi - Sí, podría usarlo para distinguir; mira el código mdetect python, hay métodos como 'detectarIphoneOrIpod',' detectAndroidPhone', o 'detectarWindowsPhone' que puedes almacenar en variables booleanas en el objeto de solicitud. Está bien comentado, así que asegúrese de estar utilizando exactamente los métodos de detección que necesita. –
funcionan muy bien, gracias Adam. ¿Por qué la respuesta no está seleccionada? – learnJQueryUI