La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Djangobile, adecuación multidispositivo en django

Presentaciones similares


Presentación del tema: "Djangobile, adecuación multidispositivo en django"— Transcripción de la presentación:

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


Descargar ppt "Djangobile, adecuación multidispositivo en django"

Presentaciones similares


Anuncios Google