Package: django-simple-webservice
Este paquete genera una muy simple interfaz (parecida a json-rpc)
de comunicación con su aplicación.SETUPInstalldjango-summernoteto your python environment.pip install django-summernoteAdddjango_summernotetoINSTALLED_APPinsettings.py.INSTALLED_APPS+=('simple_webservice',)Adddjango_summernote.urlstourls.py.urlpatterns=patterns('',...url(r'^ws/',include('simple_webservice.urls',namespace='ws')),...)Addwebservice_autodiscover()an the top osurls.pyfromsimple_webserviceimportwebservice_autodiscoverwebservice_autodiscover()urlpatterns=patterns('',...)USAGEcreate a filewebservices.pyinside the app with the webservicesInside the file copy and paste ne next lineimportsimple_webserviceaswsPuedes agregar las operaciones comunes de sobre los modelos que quieres
exponer como tus webservices, y puedes restringir el acceso a esos servicios
por ejemplo, si deseamos darle permiso de lectura al modeloUserdel
sistema de autenticacion de django para que cualquier persona pueda
consultar a dichos registros pero solo usuarios logueados puedan
modificarlos podemos escibir algo como:fromdjango.contribimportauthimportsimple_webserviceaswsws.register_model(auth.models.User,select=True)ws.register_model(auth.models.User,select=True,login=True)Puedendarsetambienvariospermisosparaoperacionesenunamismalineaperomanteniendolosmodificadoresdeaccesoiguales.PorejemplosiquisieramosdarletodoslospermisosparatodaslasoperacionesperosinestarlologeadoalmodeloGrupos,podriamoshacer..code-block::pythonws.register_model(auth.models.Group,select=True,insert=True,update=True,delete=True,login=True)Otra alternativa es crear webservices mas específicos que representen mas
la logica de su aplicación. Supongamos que tenemos el siguiente modelo
en su aplicacionfooclassFaa(models.Model):some_date=models.DateTimeField()Y deseamos hacer un metodo que siempre devuelva los objetos que superen un
cierto dia ensome_date. Podemos crear un webservice con la siguiente
forma.fromfoo.modelsimportFaa@ws.register_call(login=True)defexample_webservice(filter_date,*kwargs):# the date need to como alwys in iso formatfilter_date=ws.parse_data({"some_date":filter_date},Faa)["some_date"]query=Faa.objects.filter(some_date__gte=filter_date)returnws.query_to_dict(query)Como realizar las consultasPara realizar las consultas usted dispone de  una api uniforme que recive y
emite el formato JSON.Estas llamadas siempre se encuentran diponible en la url de su aplicación en
el pathws/call/. Por ejemplo si usted esta corriendo su servidor de
desarrollo en localhost y el pueto 8000 las llamadas se recibiran enhttp://localhost:8000/ws/call/La forma de TODA llamada se parece siempre tiene la siguiente estructura:{"id":<null|string|int|bool>,"name":"name_of_webservice_to_execute","args":{"arguments of the call"},"session":"session id if you are logged in ot null"}Elidsolo sirve para identificar llamadas con respuestasLas respuestas siempre tienen la forma:{'id':None,"stacktrace":"","error":false,"response":{"respuesta de la llamada"},"error_msg":""}Las llamadas principales son:pingRetorna siempretruesu objetivo es solo saber si el servicio
funcion.Llamada{"id":null,"name":"ping","args":{},"session":null}Respuesta{'id':None,"stacktrace":"","error":false,"response":{"ping":true},"error_msg":""}