0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
28 visualizzazioni36 pagine
This document discusses using the Tastypie library to build APIs for Django applications. It covers modeling resources after database models, using URLs to query resources, including non-modeled data, and handling errors. Examples show defining ModelResources for Team and Player models, allowing filtering and ordering, retrieving related records, and custom dehydration to include additional fields. Common errors like unindexed searches and excessive callbacks are also addressed.
This document discusses using the Tastypie library to build APIs for Django applications. It covers modeling resources after database models, using URLs to query resources, including non-modeled data, and handling errors. Examples show defining ModelResources for Team and Player models, allowing filtering and ordering, retrieving related records, and custom dehydration to include additional fields. Common errors like unindexed searches and excessive callbacks are also addressed.
This document discusses using the Tastypie library to build APIs for Django applications. It covers modeling resources after database models, using URLs to query resources, including non-modeled data, and handling errors. Examples show defining ModelResources for Team and Player models, allowing filtering and ordering, retrieving related records, and custom dehydration to include additional fields. Common errors like unindexed searches and excessive callbacks are also addressed.
Friday, February 24, 2012 Heres the plan. Friday, February 24, 2012 1. Model resourcefully. Friday, February 24, 2012 2. URLs are queries. Friday, February 24, 2012 3. Non-modeled data. Friday, February 24, 2012 4. When things go awry. Friday, February 24, 2012 Lets get this party started. Friday, February 24, 2012 1. Model resourcefully. Friday, February 24, 2012 models.py class Team(models.Model): name = models.CharField(max_length=255) city = models.CharField(max_length=255) . . . class Player(models.Model): team = models.ForeignKey(Team) rst_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) . . . class Game(models.Model): teams = models.ManyToManyField(Team) date_and_time = models.DateTimeField() . . . Friday, February 24, 2012 OMFG CODE LOL Friday, February 24, 2012 models.py class Team(models.Model): name = models.CharField(max_length=255) city = models.CharField(max_length=255) . . . class Player(models.Model): team = models.ForeignKey(Team) rst_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) . . . class Game(models.Model): teams = models.ManyToManyField(Team) date_and_time = models.DateTimeField() . . . Friday, February 24, 2012 api.py from tastypie.resources import ModelResource from tastypie import elds from tastypie.api import Api from tastypie.constants import ALL from tastypie.constants import ALL_WITH_RELATIONS Friday, February 24, 2012 api.py . . . class TeamResource(ModelResource): class Meta: queryset = Team.objects.all() resource_name = teams allowed_methods = [ get ] ltering = { name : ALL, city : ALL, } ordering = ltering
. . . Friday, February 24, 2012 api.py . . . class PlayerResource(ModelResource): team = elds.ForeignKey(my_app.TeamResource, team) class Meta: queryset = Player.objects.all() resource_name = players allowed_methods = [ get ] ltering = { rst_name : ALL, last_name : ALL, team : ALL_WITH_RELATIONS } ordering = ltering
. . . Friday, February 24, 2012 /api/v1/players/ /api/v1/teams/ Friday, February 24, 2012 MEME Friday, February 24, 2012 Friday, February 24, 2012 2. URLs are queries. Friday, February 24, 2012 api.py . . . class PlayerResource(ModelResource): team = elds.ForeignKey(my_app.TeamResource, team) class Meta: queryset = Player.objects.all() resource_name = players allowed_methods = [ get ] ltering = { rst_name : ALL, last_name : ALL, team : ALL_WITH_RELATIONS } ordering = ltering
. . . Friday, February 24, 2012 All players on a team? Friday, February 24, 2012 /api/v1/players/?team__name=Redskins Friday, February 24, 2012 api.py . . . class PlayerResource(ModelResource): team = elds.ForeignKey(my_app.TeamResource, team) class Meta: queryset = Player.objects.all() resource_name = players allowed_methods = [ get ] ltering = { rst_name : ALL, last_name : ALL, team : ALL_WITH_RELATIONS } ordering = ltering
. . . Friday, February 24, 2012 Order alphabetically? Friday, February 24, 2012 /api/v1/players/?order_by=last_name Friday, February 24, 2012 Friday, February 24, 2012 3. Non-modeled data. Friday, February 24, 2012 api.py . . . class GameResource(ModelResource): teams = elds.ManyToMany(my_app.TeamResource, team) class Meta: queryset = Player.objects.all() resource_name = players allowed_methods = [ get ] ltering = { game_date_time : ALL, teams : ALL_WITH_RELATIONS } ordering = ltering
. . . Friday, February 24, 2012 api.py . . . class GameResource(ModelResource): teams = elds.ManyToMany(my_app.TeamResource, team) day_of_the_week = elds.CharField() class Meta: queryset = Player.objects.all() resource_name = players allowed_methods = [ get ] ltering = { game_date_time : ALL, teams : ALL_WITH_RELATIONS } ordering = ltering
. . . Friday, February 24, 2012 api.py . . . class GameResource(ModelResource): teams = elds.ManyToMany(my_app.TeamResource, team) day_of_the_week = elds.CharField() . . . def dehydrate_day_of_the_week(self, bundle): return bundle.obj.game_date_time.strftime(%a) Friday, February 24, 2012 Friday, February 24, 2012 4. When things go awry. Friday, February 24, 2012 Or, when you code like @jasonbartz. Friday, February 24, 2012 Avoid /foo/?limit=0 Friday, February 24, 2012 Avoid /foo/?non_indexed_eld__icontains=foo Friday, February 24, 2012 Avoid /foo/?callback=a_long_ever_changing_number Friday, February 24, 2012 May the power of Bradlee compel you. Friday, February 24, 2012