【问题标题】:Multiple Backbonejs requests to get related model data多个Backbonejs请求获取相关模型数据
【发布时间】:2012-07-18 08:49:18
【问题描述】:

我用这两个资源构建了一个 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 来自服务器的数据以在视图中呈现它。现在我的问题是,这种方法(向服务器发送许多请求)不会减慢页面的加载速度并对用户体验和应用程序性能产生负面影响吗?有没有更好的方法来设计我的资源之间的关系? 或者,用处理savefetch 的Django 视图替换RESTful API 是否更好,或者这不是“正确”的做法?我想在学习时遵循约定和最佳实践,但是 Backbonejs 似乎真的没有约定..

谢谢

【问题讨论】:

  • ` 我必须创建一个相册对象,从服务器获取数据以在视图中呈现它。 ` 是的,这会变慢,但这就是重点。用户不会对查看所有相册照片感兴趣吗?就在他正在播放列表中的那个时。您必须实现巧妙的用户界面,以便用户必须在两个视图之间切换才能查看艺术家和照片

标签: django django-models backbone.js tastypie


【解决方案1】:

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

【讨论】:

  • 啊哈!但是如何在资源中进行过滤?顺便说一句,我是 Tastypie 的新手。这种方法听起来很理想,但是获取所有专辑并不是一个好主意,想象一下我有 2000 张专辑,所以..
  • 我不知道 Tastypie,但在 django 中你会在你的 urls.py 文件中设置路由。它应该类似于您设置 /api/{version}/albums/{id} 路由的方式。 /api/{version}/albums/byname/{name}.
  • 但是用视图替换 REST api 是个好主意吗?对我来说,它更容易操作,但我不确定 Backbone.js 是否“允许”我这样做。
  • Backbone 相当灵活。这就是为什么用于获取的 url 属性可以是字符串或返回字符串的函数。我个人认为 Resource 提供的 REST 是脚手架。它适用于 80%,但有时我需要的比提供的要多。就像过滤一样。
  • 所以据我了解,我可以保留 REST 原样,并为“特殊”情况添加 Django 视图?因为我可以随时更改模型/集合的 url?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2012-07-24
  • 2023-03-08
  • 1970-01-01
  • 2019-11-23
相关资源
最近更新 更多