| extintirecto Python / Zope / Django Implementación de un enrutador ext.direct |
Descargar ahora |
extintirecto Clasificación y resumen
- Nombre del editor:
- Ian McCracken
- Sitio web del editor:
- http://code.google.com/u/ian.mccracken/
extintirecto Etiquetas
extintirecto Descripción
Implementación de Python / Zope / Django de un enrutador ext.direct Para usar EXTDIRECT, debe tener instalado Simplejson, o usar Python 2.6 (que incluye Simplejson como el paquete JSON) .extjs 3.0 proporciona ext.direct, una forma extremadamente simple de los métodos remotos del lado del servidor al lado del cliente. EXTDIRECT proporciona una implementación de Python de un enrutador ext.Direct del lado del servidor, que puede aceptar y analizar los datos de solicitud ext.Direct, vaya al método correcto y cree, codifiquen y devuelva la estructura de datos adecuada envolviendo los resultados. EXTDIRECT también proporciona una clase que puede generar el lado del cliente JavaScript que define un proveedor ext.direct de un enrutador Class.let's, consulte cómo funciona el lado del servidor. Primero, definiremos un enrutador: >>> de Extdirect.Router Import DIRECTROUTER >>> Clase Testutils (DirectRouter): ... ... Def Capitalize (Self, Word): ... devuelve la palabra.upper () ... ... Definid hoy (yo): ... regreso "Hoy es el miércoles". Hemos definido dos métodos que queremos remotos al cliente. Aunque no tenemos un verdadero cliente en este corredor de pruebas, aquí está Cómo se generaría el código que debe entregarse al cliente que define el proveedor. Ignorando la implementación real, que dependería del marco que se está utilizando, digamos que tendremos esta clase disponible en URL '/ utils', y queremos que nuestro espacio de nombres del lado del cliente que contenga estos métodos simplemente para que se llamen "remoto". >>> de extdirect.Router Import DirectProviderDefinition >>> Imprimir DirectProviderDefinItion (testutils, '/ utils', 'remoto'). Render () ext.Onready (Función () {ext. Direct.AddProvider ({Type: 'Remoting', URL: '/ utils', Acciones: {"testutils": }, espacio de nombres: 'remoto'});}); Ahora, suponiendo que, de una forma u otra, hemos proporcionado este código al cliente y nuestra clase está disponible en esa URL, ahora podemos acceder a estos métodos desde el navegador: remoto.testutils.capitalizar ( {Word: 'foo'}, console.log) ese ejemplo haría una llamada al método 'capitalizar' en nuestra clase de testecos y alimentar el resultado a nuestra devolución de llamada, que en este caso simplemente imprime el resultado a la consola de JS.let's Vea cómo eso funcionaría desde la perspectiva del servidor. Esa llamada haría una solicitud de publicación con un cuerpo codificado de JSON, por lo que vamos a crear eso manualmente: >>> de extdirect.Router Importar JSON >>> DATOS = {"Acción": "Testutils", "Método": "Capitalizar" "Datos": , "tipo": "rpc", "tid": 1} >>> body = json.dumps (datos) Nuestro nombre de clase se pasa como " Acción ", el nombre del método como" método ", y cualquiera de los datos que enviamos como una matriz de un solo miembro que contiene un hash de nuestros parámetros. Para nuestros propósitos, "Tipo" siempre será "RPC". Las solicitudes ext.direct también proporcionan un ID de transacción ("TID") que se puede usar, ya que se puede usar para manejar la posibilidad de datos estancados. Ahora, hagamos una instancia de nuestra clase de lado del servidor: >>> utils = testutils ( ) Esta instancia se puede llamar y acepta el organismo de solicitud, y devuelve un objeto codificado JSON que exhibe la estructura esperada por ext.Direct en el cliente: >>> utils (cuerpo) '{"tid": 1, "acción": " Testutils "," tipo ":" RPC "," Método ":" Capitalize "," Resultado ":" FOO "} 'Aviso el" resultado ", que es lo que queríamos esperar. El cliente decodificaría este objeto y pasaría el valor de "resultado" a la devolución de llamada. Solo por diversión, echemos un vistazo a nuestro otro método definido: >>> DATOS = {"Acción": "TestUtiles", "Método": "Hoy", "Datos": [], "Tipo": "RPC" "," TID ": 1} >>> Body = JSON.Dumps (Datos) >>> Resultob = JSON.loads (Utils (Body)) >>> Lámina de impresión Hoy es miércoles. Y eso es: A Muy Manera fácil de remotos métodos del lado del servidor al lado del cliente. Requisitos: · Python ¿Qué hay de nuevo en este lanzamiento: · Actualizado el subpackage de Django con el parche de AVIZOA que reemplaza "Importar vistas" con el · Mucho más limpio "extdirect.autodiscover ()".
extintirecto Software relacionado