Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé Carlos Sánchez González Modificado hace 7 años
1
Djangobile, adecuación multidispositivo en django
Javier de la Rosa
2
Una arquitectura al estilo J2ME. Un SDK como el del iPhone.
¿Qué NO es? Una arquitectura al estilo J2ME. Un SDK como el del iPhone. Un entorno de desarrollo de webs adaptadas como Aptana. Un ICM™ como BuzzCast™ de Volantis.
3
¿Qué es Djangobile? “Una extensión de Django que permite identificar el dispositivo que realiza la petición y ofrecer un contenido u otro”.
4
Enriquecimiento de los proyectos Django tradicionales.
Características Enriquecimiento de los proyectos Django tradicionales. N interfaces, una lógica. Directrices de MyMobileWeb, pero agilidad de Django. Futuro uso de estándares.
5
Tokenizer y Levenshtein. Context processors. Middlewares. Más...
¿En qué se basa? WURFL y PyWURFL. Tokenizer y Levenshtein. Context processors. Middlewares. Más...
6
Base de datos de dispositivos y sus capacidades.
WURFL y PyWURFL Base de datos de dispositivos y sus capacidades. Estándar. Libre y mantenida. “Apoyada” por el W3C.
7
Tokenizer y Levenshtein
Cálculo de “distancias” entre cadenas de texto. Módulo Python muy rápido (binding C). Algoritmos mejorados: Levenshtein y Jaro- Winkler.
8
Función Python muy sencilla.
Context processor (I) Función Python muy sencilla. Establece nuevas variables a usar en las plantillas. Recibe un objeto HttpRequest. Devuelve un diccionario con las nuevas adiciones al contexto.
9
Context processor (II)
def mobile(request): user_agent = request.META.get('HTTP_USER_AGENT', None) if not user_agent: return {} if hasattr(request, 'device'): device = request.device if device.get('user_agent', False) != user_agent: device = get_device(user_agent) request.session['device'] = device elif request.session.test_cookie_worked(): request.session.delete_test_cookie() device = request.session.get('device', False) if not device: else: device = get_device(user_agent) request.session['device'] = device request.session.set_test_cookie() return {'device': device}
10
Capa intermedia entre petición y respuesta.
Middleware (I) Capa intermedia entre petición y respuesta. Sencillo sistema de “plugins” de bajo nivel. Permite alterar la salida y/o entrada de Django.
11
Middleware (II) class DjangoMobileMiddleware(object):
def process_response(self, request, response): if hasattr(settings, 'DEBUG') and settings.DEBUG: print "[%s] From %s (%s): %s (%s)" % ( datetime.today().strftime("%d/%b/%Y %H:%M:%S"), request.device.get('id', ''), request.device.get('preferred_markup', ''), request.device.get('user_agent', ''), request.META.get('HTTP_USER_AGENT', '') ) return response def process_request(self, request): device = mobile(request)['device'] setattr(request, 'device', device) return None
12
Sesiones y cookies: request.session['device']
Más Sesiones y cookies: request.session['device'] Shorcuts: djangobile.shortcuts.render_to_response Loaders: djangobile.template.loader.render_to_string djangobile.template.loader.select_template djangobile.template.loader.get_template Utils: djangobile.utils.get_device djangobile.utils.get_device_template_paths
13
Integración de transcodificación.
Futuro Adopción de IDEAL. Integración de transcodificación. Proposición inteligente de contenido. Paginación automática. Templates por defecto. Integración con AppEngine.
14
Material: http://oswc.yaco.es/djangobile/
Más información Material: Código: Grupo de discusión: Y yo mismo: versae at {gmail.com|yaco.es}
15
Instalación Descargar el proyecto del SVN svn co Añadir el middleware: MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', 'djangobile.middleware.DjangoMobileMiddleware', ) Establecer el context processor en settigns.py: TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'djangobile.context_processors.mobile', )
16
Uso (I) En vistas: def vista(request): if request.device['is_mobile_device']: # Hacer algo para móviles elif request.device['is_pda_device']: # Hacer algo para PDA's elif request.device['is_pc_device']: # Hacer algo para PC's else: # Hacer algo en el resto de casos ¿? # Es posible preguntar por una capacidad en concreto if request.device['brand_name'].lower() == 'nokia': # Hacer algo para los Nokia
17
Directorio de plantillas:
Uso (II) En vistas y plantillas: # views.py from django.template import RequestContext from djangobile.shortcuts import render_ro_response def vista(request): # Código return render_to_response('test.html', {}, context_instance=RequestContext(request)) Directorio de plantillas:
18
Opciones en settings.py
WURFL_CLASS USER_AGENT_SEARCH_ALGORITHM: Tokenizer, JaroWinkler and LevenshteinDistance. DEVICE_SEARCH_ORDER: id, user_agent, fall_back, preferred_markup, model_name, brand_name.
19
¿Preguntas?
20
Gracias
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.