Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Recorrer estructura de datos para generar formulario web

Estas en el tema de Recorrer estructura de datos para generar formulario web en el foro de Python en Foros del Web. Hola a todos, espero que alguno pueda ayudarme. Estoy realizando un programa que invoca servicios web de manera dinámica , algo parecido a esto http://www.soapclient.com/soaptest.html ...
  #1 (permalink)  
Antiguo 30/03/2013, 13:52
 
Fecha de Ingreso: diciembre-2012
Mensajes: 5
Antigüedad: 11 años, 4 meses
Puntos: 0
Recorrer estructura de datos para generar formulario web

Hola a todos, espero que alguno pueda ayudarme.

Estoy realizando un programa que invoca servicios web de manera dinámica , algo parecido a esto

http://www.soapclient.com/soaptest.html

Para esto he utilizado la api para Python llamada SUDS

https://fedorahosted.org/suds/wiki/Documentation

Bueno ahora el problema es este, SUDS tiene un método que genera una estructura de datos a partir de una cadena de texto que identifica a alguna operación definida en el servicio web. Esta estructura de datos representa los parámetros de entrada que esta operación acepta.
Ejemplo

Código PHP:
>>> foo cliente.factory.create('GetACHReturnsRC')
>>> print 
foo

(GetACHReturnsRC){
   
InpCompanyInfo 
      (
CompanyInfo){
         
SSS None
         LocID 
None
         Company 
None
         CompanyKey 
None
      
}
   
InpResponseCode None
 
}
>>> for 
x in foo:
>>> . . . print 
'-',x
>>> . . . for y in x:
>>> . . . . . . print 
'  +',y

- (InpCompanyInfo, (CompanyInfo){
      
SSS None
      LocID 
None
      Company 
None
      CompanyKey 
None
   
})
     + 
InpCompanyInfo
     
+ (CompanyInfo){
         
SSS None
         LocID 
None
         Company 
None
         CompanyKey 
None
    
}
- (
InpResponseCodeNone)
     + 
InpResponseCode
     
None 
Aquí se puede ver que el nombre de la operación es:
GetACHReturnsRC

que recibe dos parámetros de nombre
InpCompanyInfo
InpResponseCode


El parámetro InpCompanyInfo es de tipo CompanyInfo que incluye los parámetros anidados
SSS
LocID
Company
CompanyKey


Esta estructura de datos puede ser llenada de la siguiente forma:

Código PHP:
>>> foo.InpCompanyInfo.SSS '123'
>>> foo.InpCompanyInfo.LocID '35'
>>> foo.InpCompanyInfo.Company 'Intel'
>>> foo.InpCompanyInfo.CompanyKey '33'
>>> foo.InpResponseCode 'Ok'
>>> print foo

(GetACHReturnsRC){
   
InpCompanyInfo 
      (
CompanyInfo){
         
SSS "123"
         
LocID "35"
         
Company "Intel"
         
CompanyKey "33"
      
}
   
InpResponseCode "Ok"
 

Lo que necesito es una forma de generar un formulario web a partir de esta información, en la página de ejemplo:

http://www.soapclient.com/soaptest.html

representan esta situación de la siguiente forma



¿Cómo podría generar un formulario parecido a este, y cómo podría asignar los valores ingresados en el formulario a mi estructura?

Las restricciones:
Al inicio solo conozco el nombre de la operación, es decir, desconozco el nombre de los parámetros de entrada y si contienen campos anidados.
Al llamar a SUDS, el resultado sería como el del ejemplo previo, es decir, la información requerida vendría "empaquetada" en la estructura devuelta por SUDS.
Lo que devuelve SUDS es toda la información que tendría para generar los formularios.

P.D. Estoy utilizando el framework Django.

Muchas gracias por su ayuda.

Última edición por Cobol; 30/03/2013 a las 14:17
  #2 (permalink)  
Antiguo 30/03/2013, 14:49
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Recorrer estructura de datos para generar formulario web

Parece ser un problema que requiere de meta clases.

Si no sabes que es una meta clase te recomiendo esta entrada de stackoverflow.
http://stackoverflow.com/a/6581949/371342

Ahora ¿que tiene que ver las meta clases y los formularios?

Bueno es bastante simple, un formulario simplemente es una clase que hereda de la clase Form. Pero como nosotros no sabemos que campos va a tener el formulario hasta el tiempo de ejecución. Entonces generamos clases de manera dinámica que hereden de la clase Form, con los campos necesario (text field, multiple choice, boolean field, integer field etc..).

Si este enfoque se te hace demasiado complejo, puedes hacer algo mas sencillo. Por ejemplo, en tu vista cuando recibas la petición GET nada mas pasas el nombre de los campos y el nombre de la funcion al template y en el template generas el formularios con esos datos. Obviamente todos los campos serian de un solo tipo. Y por ultimo en la petición POST procesos los datos recibidos.

En conclusion vas a tener que hacer instrospection a tu suds client, o parsearlo del string que genera o de plano parsear el wsdl para obtener la información necesaria.
  #3 (permalink)  
Antiguo 03/04/2013, 08:51
 
Fecha de Ingreso: diciembre-2012
Mensajes: 5
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Recorrer estructura de datos para generar formulario web

Gracias por la ayuda, al final utilicé la segunda forma, quizás en una actualización de la aplicación, pruebe con la introspección.

Etiquetas: django, estructura, formulario, mac
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:29.