Changes between Version 7 and Version 8 of Version2/Tutoriales/Consola_Web/Tutorial_2_Acciones_en_Panel_Contextual


Ignore:
Timestamp:
May 3, 2011, 4:12:01 PM (8 years ago)
Author:
edulix
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Version2/Tutoriales/Consola_Web/Tutorial_2_Acciones_en_Panel_Contextual

    v7 v8  
    33Este es el segundo tutorial de la saga de tutoriales sobre Opengnsys 2 referentes a cómo implementar plugins para la Consola Web. Puedes acceder a la [wiki:Version2/Desarrollo página que lista todos los tutoriales] o al tutorial anterior: [wiki:Version2/Tutoriales/Consola_Web/Tutorial_1_Hello_World Tutorial 1: Hello World].
    44
    5 Este segundo tutorial se basa en el anterior, por tanto es preciso haberlo comprendido para poder continuar. En el primer tutorial conseguimos que en el Panel Principal se mostrase la acción "hello", a la que si accedíamos veíamos una página con el estilo de la consola web y en la que el área de contenido mostraba el mensaje "Hello World". Es un tutorial muy sencillo conceptual, ente pero sirve para introducir al desarrollador las nociones básicas de cómo funciona el sistema de plugins de la consola web:
     5Este segundo tutorial se basa en el anterior, por tanto es preciso haberlo comprendido para poder continuar. En el primer tutorial conseguimos que en el Panel Principal se mostrase la acción "hello", a la que si accedíamos veíamos una página con el estilo de la consola web y en la que el área de contenido mostraba el mensaje "Hello World". Es un tutorial muy sencillo conceptualmente, pero sirve para introducir al desarrollador las nociones básicas de cómo funciona el sistema de plugins de la consola web:
    66
    7  * La estructura de ficheros y directorios: todo plugin tiene su directorio en pluginmanager/plugins/<nombre del plugin>, el código principal del plugin va en !__init!__.py, la información básica sobre el plugin en plugin.conf y los templates en el subdirectorio templates/.
    8  * En !__init!__.py definimos nuestra clase Plugin que hereda de !PluginBase y en la que redifinimos las funciones que sean necesarias.
    9  * El desarrollo se basa en el framework web.py: templates en html mezclado con python, urls del plugin definidas en un array "self.urls" dentro de la clase Plugin, clases que funcionan como vistas y que llaman a los templates con parámetros de entrada, etc.
     7 * La estructura de ficheros y directorios: todo plugin tiene su directorio en plugins/<nombre del plugin>, el código principal del plugin va en !__init!__.py, la información básica sobre el plugin en plugin.conf y los templates en el subdirectorio templates/.
     8 * En !__init!__.py definimos nuestra clase Plugin que hereda de !PluginBase y en la que redefinimos las funciones que sean necesarias.
     9 * El desarrollo se basa en el framework web.py: templates en HTML mezclado con código Python, urls del plugin definidas en un array "self.urls" dentro de la clase Plugin, clases que funcionan como vistas y que llaman a las plantillas con parámetros de entrada, etc.
    1010
    1111En este segundo tutorial añadiremos a nuestro plugin una nueva acción que aparecerá en el Panel Contextual del navegador de la consola cuando se esté mostrando un ordenador o una unidad organizativa. En la página asociada a la acción mostraremos un mensaje que diga "Hello Computer <computerName>!" si se trata de un ordenador, o "Hello Organizative Unit <ouName>!" si se trata de una unidad organizativa. Como hemos dicho, nos basaremos en el del plugin del tutorial 1.
    12 
    1312
    1413= Creando la acción =
     
    2322}}}
    2423
    25 Efectivamente, vamos a usar la misma acción para mostrar el mensaje tanto si se trata de una Unidad Organizativa o un Ordenador, dado que la acción es concepturalmente la misma, pero sobre entidades diferentes. Ahora viene el quid de la cuestión, el código de !__init!__.py:
     24Efectivamente, vamos a usar la misma acción para mostrar el mensaje tanto si se trata de una Unidad Organizativa o un Ordenador, dado que la acción es conceptualmente la misma, pero sobre entidades diferentes. Ahora viene el quid de la cuestión, el código de !__init!__.py:
    2625
    2726{{{
     
    5453 1. La expresión regular que hemos puesto en self.actions_for_url que coincide con esa url es 'navigator/(computer|ou)/(.*)'.
    5554 1. Por tanto la lista de elementos de los paréntesis de la expresión regular es ['computer', 'fresa']
    56  1. En self.urls hemos definido que la vista asociada a la acción 'hello_view' es hello.HelloEntityView.
    57  1. En hello.HelloEntityView.GET recibiremos los argumentos 'computer' y 'fresa' del paso 3.
     55 1. En self.urls hemos definido que la vista asociada a la acción 'hello_view' es hello.!HelloEntityView.
     56 1. En hello.!HelloEntityView.GET recibiremos los argumentos 'computer' y 'fresa' del paso 3.
    5857
    5958Ahora añadiremos la clase !HelloEntityView al fichero hello.py, resultando en:
     
    8382}}}
    8483
    85 Como véis hemos hecho unos pequeños cambios. Primero, hemos importado unicode_literals del "futuro" (Python 3). Esto nos garantiza que no tendremos problemas con la codificación de las cadenas, haciendo que por defecto todas sean en UTF. También hemos modificado cómo llamamos el template: en vez de crear uno nuevo para nuestra vista, le pasamos al template la cadena que queremos mostrar y así podemos reutilizarlo. También, debido a que el plugin está internacionalizado, usamos el decorador '''pi18n''' que nos añade automáticamente la función '''_''' dentro de la función decorada (para saber más sobre la internacionalización de los plugins lee el [wiki:Version2/Tutoriales/Consola_Web/Tutorial_3_Internacionalizacion Tutorial 3: Internacionalización de plugins]).
     84Como véis hemos hecho unos pequeños cambios. Primero, hemos importado unicode_literals del "futuro" (Python 3). Esto nos garantiza que no tendremos problemas con la codificación de las cadenas, haciendo que por defecto todas sean en UTF-8. También hemos modificado cómo llamamos el template: en vez de crear uno nuevo para nuestra vista, le pasamos al template la cadena que queremos mostrar y así podemos reutilizarlo. También, debido a que el plugin está internacionalizado, usamos el decorador '''pi18n''' que nos añade automáticamente la función '''_''' dentro de la función decorada (para saber más sobre la internacionalización de los plugins lee el [wiki:Version2/Tutoriales/Consola_Web/Tutorial_3_Internacionalizacion Tutorial 3: Internacionalización de plugins]).
    8685
    8786Por último, como dijimos antes, la función GET de nuestra vista ahora toma como parámetros aquellos elementos entre paréntesis de la url de self.actions_for_url como hemos visto antes.
     
    10099= Usando el plugin =
    101100
    102 Si ya teníamos activado el plugin y ejecutándose el servidor, tendremos que bien reiniciar el servidor o desactivar y volver a activar el plugin. Esto es necesario para forzar la recarga del mismo. Luego de hacerlo, podremos ver que siempre que naveguemos por una unidad organizativa o un ordenador, aparecerá la acción que hemos dispuesto (mostrando el texto "Say hello to this"), y al hacer clic saludará correctamente a la entidad correcta.
     101Si ya teníamos activado el plugin y ejecutándose el servidor, tendremos o bien reiniciar el servidor o bien desactivar y volver a activar el plugin. Esto es necesario para forzar la recarga del mismo. Luego de hacerlo, podremos ver que siempre que naveguemos por una unidad organizativa o un ordenador, aparecerá la acción que hemos dispuesto (mostrando el texto "Say hello to this"), y al hacer clic saludará correctamente a la entidad correspondiente, sea un ordenador o una unidad organizativa.