(. Tuve que editar los enlaces más evidentes)
1 de piston
- (enlace encima). Yo había usado apibuilder
(código abierto de Washington Times) en el pasado, pero Piston me resulta más fácil. Lo más difícil para mí es encontrar las estructuras de mi URL para la API y ayudar con las expresiones regulares. También he usado surlex, lo que hace que la tarea sea mucho más fácil.
ejemplo, el uso de este modelo para Group
(de un sistema de calendario que estamos trabajando):
class Group(models.Model):
"""
Tree-like structure that holds groups that may have other groups as leaves.
For example ``st01gp01`` is part of ``stage1``.
This allows subgroups to work. The name is ``parents``, i.e.::
>>> stage1group01 = Group.objects.get(unique_name = 'St 1 Gp01')
>>> stage1group01
>>> <Group: St 1 Gp01>
# get the parents...
>>> stage1group01.parents.all()
>>> [<Group: Stage 1>]
``symmetrical`` on ``subgroup`` is needed to allow the 'parents' attribute to be 'visible'.
"""
subgroup = models.ManyToManyField("Group", related_name = "parents", symmetrical= False, blank=True)
unique_name = models.CharField(max_length=255)
name = models.CharField(max_length=255)
academic_year = models.CharField(max_length=255)
dept_id = models.CharField(max_length=255)
class Meta:
db_table = u'timetable_group'
def __unicode__(self):
return "%s" % self.name
Y este fragmento urls.py (tenga en cuenta que surlex permite macros de expresiones regulares que se creará con facilidad) :
from surlex.dj import surl
from surlex import register_macro
from piston.resource import Resource
from api.handlers import GroupHandler
group_handler = Resource(GroupHandler)
# add another macro to our 'surl' function
# this picks up our module definitions
register_macro('t', r'[\w\W ,-]+')
urlpatterns = patterns('',
# group handler
# all groups
url(r'^groups/$', group_handler),
surl(r'^group/<id:#>/$', group_handler),
surl(r'^group/<name:t>/$', group_handler),)
A continuación, este controlador se verá después de la salida JSON (por defecto) y también puede hacer XML y YAML.
class GroupHandler(BaseHandler):
"""
Entry point for Group model
"""
allowed_methods = ('GET',)
model = Group
fields = ('id', 'unique_name', 'name', 'dept_id', 'academic_year', 'subgroup')
def read(self, request, id=None, name=None):
base = Group.objects
if id:
print self.__class__, 'ID'
try:
return base.get(id=id)
except ObjectDoesNotExist:
return rc.NOT_FOUND
except MultipleObjectsReturned: # Should never happen, since we're using a primary key.
return rc.BAD_REQUEST
else:
if name:
print self.__class__, 'Name'
return base.filter(unique_name = name).all()
else:
print self.__class__, 'NO ID'
return base.all()
Como se puede ver, la mayor parte del código del controlador está en averiguar lo que se están pasando los parámetros en urlpatterns
.
Algunas URL de ejemplo son api/groups/
, api/group/3301/
y api/group/st1gp01/
- todas las cuales generarán JSON.
¿Qué hay de JSON obtener? – marcc
Cree un decorador 'json_view', que es similar:' return HttpResponse (json.dumps (result), mimetype = "application/json") ' –
(Instale' simplejson' o use el módulo 'json' incorporado en Python 2.6 y posteriores) –