Skip to main content

Django app for simple create json-rpc like webservices

Project description

Este paquete genera una muy simple interfaz (parecida a json-rpc) de comunicación con su aplicación.

SETUP

  1. Install django-summernote to your python environment.

pip install django-summernote
  1. Add django_summernote to INSTALLED_APP in settings.py.

INSTALLED_APPS += ('simple_webservice', )
  1. Add django_summernote.urls to urls.py.

urlpatterns = patterns('',
    ...
    url(r'^ws/', include('simple_webservice.urls', namespace='ws')),
    ...
)
  1. Add webservice_autodiscover() an the top os urls.py

from simple_webservice import webservice_autodiscover
webservice_autodiscover()

urlpatterns = patterns('',
    ...
)

USAGE

  1. create a file webservices.py inside the app with the webservices

  2. Inside the file copy and paste ne next line

import simple_webservice as ws
  1. Puedes 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 modelo User del sistema de autenticacion de django para que cualquier persona pueda consultar a dichos registros pero solo usuarios logueados puedan modificarlos podemos escibir algo como:

        from django.contrib import auth
    
        import simple_webservice as ws
    
        ws.register_model(auth.models.User, select=True)
        ws.register_model(auth.models.User, select=True, login=True)
    
    
    Pueden darse tambien varios permisos para operaciones en una misma linea
    pero manteniendo los modificadores de acceso iguales. Por ejemplo si
    quisieramos darle todos los permisos para todas las operaciones pero
    sin estarlo logeado al modelo Grupos, podriamos hacer
    
    .. code-block:: python
    
        ws.register_model(auth.models.Group, select=True, insert=True,
                          update=True, delete=True, login=True)
  2. 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 aplicacion foo

    class Faa(models.Model):
    
        some_date = models.DateTimeField()

    Y deseamos hacer un metodo que siempre devuelva los objetos que superen un cierto dia en some_date. Podemos crear un webservice con la siguiente forma.

    from foo.models import Faa
    
    @ws.register_call(login=True)
    def example_webservice(filter_date, *kwargs):
        # the date need to como alwys in iso format
        filter_date = ws.parse_data(
            {"some_date": filter_date}, Faa
        )["some_date"]
    
        query = Faa.objects.filter(some_date__gte=filter_date)
        return ws.query_to_dict(query)

Como realizar las consultas

Para 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 path ws/call/. Por ejemplo si usted esta corriendo su servidor de desarrollo en localhost y el pueto 8000 las llamadas se recibiran en

http://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"
}

El id solo sirve para identificar llamadas con respuestas

Las respuestas siempre tienen la forma:

{
  'id': None,
  "stacktrace": "",
  "error": false,
  "response": {"respuesta de la llamada"},
  "error_msg": ""
}

Las llamadas principales son:

  • ping Retorna siempre true su 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": ""
    }

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-simple-webservice-0.1.1.tar.gz (11.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page