PyQt en ejemplos (Sesión 2) en castellano!
Si alguien quiere traducir a otro idioma, por favor contácteme!
Si alguien quiere traducir a otro idioma, por favor contácteme!
init({ 'middleware':[('paste.auth.basic.AuthBasicHandler', {'realm':'Admin', 'authfunc':valid_user})], })
Donde valid_user es la función obvia que toma usuario/password y devuelve True/False.
No es exactamente una cosa sofisticada con roles, pero no necesito eso para my aplicación (los controles de acceso de LDAP se encargan).
Así que, que miércoles, aprendamos algo mientras tanto. Las víctimas: Pyjamas y Juno.
Pyjamas es una versión Python de GWT y es una bendición: finalmente puedo escribir HTML y JS en python ;-)
Y Juno es refrescantemente simple. Ya que todo el frontend está hecho en Pyjamas, lo único que necesito es una manera de routear llamadas JSONRPC a código python y operar en el backend.
Así que acá hay dos fragmentos útiles:
# This decorator decodes JSONRPC arguments as sent by Pyjamas to # Juno, and calls the target function with the decoded version. def JSONRemote(target): def wrapper(web,*args,**kwargs): postdata=web.input().keys()[0] data = json.loads(postdata) id, method, params = data["id"],data["method"],[web,]+data["params"][1] kwargs['method']=method return target(*params,**kwargs) return wrapper
usando esto, cualquier metodo Juno funciona como método JSONRPC!
Ejemplo:
@route('/user') @JSONRemote def list(web,startwith='*',method=None): try: result=search(filter='(&(uid=*@bigclient.ar)(sn=%s*))'%startwith) resp=JSONResponse(result) except ldap.LDAPError, e: resp=JSONResponse(None,e.desc) return resp
¿Ven? Nada de decodificar JSON. Y no codificar tampoco, porque creo la respuesta usando esto:
# This class creates a correct JSON response from Juno as required by Pyjamas class JSONResponse(JunoResponse): def __init__(self,result=None,error=None,id=None,code=200): JunoResponse.__init__(self) self.headers['Content-Type']='text/javascript' self.append(json.dumps({'result':result,'error':error,'id':id,'code':code}))
Probablemente no sea una gran implementación pero me sirve por ahora.
Mañana voy a subir por lo menos una.
Si alguien quiere traducir a otros lenguajes, me encantaría incluirlos también.
Esta sesión hacemos trabajo pesado en Designer, incluyendo "promoted widgets", "custom slots" y mucho más.
Ver también: