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
Install django-summernote to your python environment.
pip install django-summernote
Add django_summernote to INSTALLED_APP in settings.py.
INSTALLED_APPS += ('simple_webservice', )
Add django_summernote.urls to urls.py.
urlpatterns = patterns('',
...
url(r'^ws/', include('simple_webservice.urls', namespace='ws')),
...
)
Add webservice_autodiscover() an the top os urls.py
from simple_webservice import webservice_autodiscover
webservice_autodiscover()
urlpatterns = patterns('',
...
)
USAGE
create a file webservices.py inside the app with the webservices
Inside the file copy and paste ne next line
import simple_webservice as ws
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)
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for django-simple-webservice-0.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fc30a7146778bd2825eac949fc1000ffbff3646dbea390be9a5c022f3f2c807 |
|
MD5 | b329c2ededffbca7d30760207885de40 |
|
BLAKE2b-256 | f0e49bf0350a18497b012511baa33a142db4136d5c9705d357e174fd864d72e5 |