(. Ich hatte die naheliegendste Links zu bearbeiten out)
+1 für piston
- (link über). Ich hatte apibuilder
(Washington Times Open Source) in der Vergangenheit verwendet, aber Piston funktioniert einfacher für mich. Am schwierigsten ist es für mich, meine URL-Strukturen für die API herauszufinden und bei den regulären Ausdrücken zu helfen. Ich habe auch surlex benutzt, was diese Arbeit viel einfacher macht.
Beispiel, unter Verwendung dieses Modells für Group
(von einem Zeitplan System wir arbeiten):
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
Und dieses urls.py Fragment (beachten Sie, dass surlex ermöglicht regulären Ausdruck Makros leicht eingerichtet werden) :
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),)
Dann wird dieser Handler sucht nach der Ausgabe JSON (Standard) und kann auch XML und YAML tun.
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()
Wie Sie sehen können, die meisten der Handler-Code ist in herauszufinden, welche Parameter in urlpatterns
übergeben werden.
Einige Beispiel-URLs sind api/groups/
, api/group/3301/
und api/group/st1gp01/
- die alle JSON ausgeben.
Wie wäre es mit JSON? – marcc
Erstellen Sie einen 'json_view'-Dekorator, der ähnlich ist:' return HttpResponse (json.dumps (Ergebnis), mimetype = "application/json") ' –
(Installieren Sie' simplejson' oder verwenden Sie das integrierte 'json'-Modul in Python 2.6 und höher.) –