2012-02-02 18 views
18

Im Junior django dev. Necesito detectar 3 tipos de dispositivos, tabletas, dispositivos móviles o computadoras de escritorio. Encuentro script para dispositivos móviles detectados (https://github.com/macgera/macgera/blob/master/middleware.py), pero ¿cómo puedo detectar dispositivos móviles, tabletas y computadoras de escritorio?Detectar móvil, tableta o computadora de escritorio en Django

¡Gracias!

Respuesta

1

Si quieres una solución rápida y simple, puedes probar handset detection's javascript que te permite crear reglas de redirección simples.

5

Eche un vistazo a MobileESP. Recientemente se ha migrado a Python para el marco de la aplicación web Django. Puede detectar varias clases y niveles de dispositivos (incluidos smatphones, tabletas).

33

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).

+0

¿puedo detectar/distinguir con él 'ios',' android', 'windows phone'? – andi

+2

@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. –

+0

funcionan muy bien, gracias Adam. ¿Por qué la respuesta no está seleccionada? – learnJQueryUI

0

Estaba buscando algo como esto y me encontré con django-mobile que hace exactamente eso. (Sé que esta pregunta es muy antigua y que la persona que la publicó es probablemente un desarrollador sénior de Django, pero quizás esto pueda ayudar a las personas que la buscan en estos días).

Cuestiones relacionadas