(私が最も明白なリンクを編集する必要がありました。)
1 - (リンク上記)。私は以前はapibuilder
(ワシントンタイムズのオープンソース)を使っていましたが、Pistonは私にとっては簡単です。私にとって最も難しいのは、APIのURL構造を把握し、正規表現を助けることです。私もsurlexを使って、その雑用をはるかに簡単にしました。
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
そしてこのurls.py断片(正規表現マクロを簡単に設定することを可能にすることsurlexに注意してください):(私たちが取り組んでいる時刻表システムから)Group
ためにこのモデルを使用して
例、 :
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),)
その後、このハンドラは、(デフォルトで)JSON出力した後になりますし、またXMLや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()
、ハンドラコードのほとんどは、パラメータがurlpatterns
に渡されているかを把握しています。
URLの例としては、api/groups/
,api/group/3301/
、api/group/st1gp01/
などがあり、いずれもJSONが出力されます。
JSONはどうですか? – marcc
同様の 'json_view'デコレータを作成します:' return HttpResponse(json.dumps(result)、mimetype = "application/json") ' –
(' simplejson'をインストールするか、組み込み 'json'モジュールをPython 2.6以降) –