多个Backbonejs请求获取相关的模型数据

时间:2012-07-18 08:49:18

标签: django django-models backbone.js tastypie

我使用这两个资源(使用tastypie)构建了一个RESTful API:

class PhotographerResource(ModelResource):
    album = fields.ToManyField('core.api.AlbumResource', 'album_set')
    class Meta:
        queryset = Photographer.objects.all()
        resource_name = 'photographer'
        authorization = Authorization()


class AlbumResource(ModelResource):

    artist = fields.ForeignKey(PhotographerResource, 'photographer', full=True)

    class Meta:
        queryset = Album.objects.all()
        resource_name= 'albums'
        authorization = Authorization()

现在,当我访问/api/v1/albums/1时,我得到以下结果:

{
"album": ["/api/v1/albums/4/", "/api/v1/albums/5/"],
"photographer_name": "Jimi Hendrix",
"photographer_thumbnail": "http://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Katatonia_in_2004.jpg/300px-Katatonia_in_2004.jpg",
"biography": "Jimmi Hendrix is an awesome musician man...",
"id": "1",
"page_link": "http://ahmetkaya.com/",
"resource_uri": "/api/v1/artists/1/",
"slug": "jimi-hendrix"
}

现在我的前端是Backbonejs,当我想获得摄影师的专辑时,我将不得不创建一个album对象,fetch来自服务器的数据来呈现它在视图中。现在我的问题是,这种方法(向服务器发送许多请求)不会减慢页面加载速度并对UX和应用程序性能产生负面影响吗?有没有更好的方法来设计我的资源之间的关系? 或者,用处理savefetch的Django视图替换RESTful API是否更好,或者这不是“正确”的方法吗?我想在学习时遵循惯例和最佳实践,但Backbonejs似乎没有任何惯例......

由于

1 个答案:

答案 0 :(得分:1)

在骨干端,您可以创建一个Album集合并将其url设置为/ api / v1 / albums并在集合上调用fetch。这将在一个http请求中提取所有相册。如果你需要通过/ api / v1 / albums / byname / jonathancoulton或/ api / v1 / albums / bytitle / codemonkey等提供过滤,url也可以是一个函数。如果您经常使用此功能,我还在集合上设置了自定义提取功能