Ответ 1
вы можете указать коллекции/модели опорных костей на любые требуемые URL-адреса и проанализировать ответ, как вы хотите, в своих подклассах.
Model.url:
http://documentcloud.github.com/backbone/docs/backbone.html#section-43
Collection.parse:
http://documentcloud.github.com/backbone/docs/backbone.html#section-69
Вы можете настроить одноразовые обработчики запросов, которые могут возвращать некоторый json для магистрали для синтаксического анализа/глотания без поршня или tastypie. Но, да, это два хороших решения для всеобъемлющего REST с django.
Здесь есть несколько полезных советов: http://joshbohde.com/blog/backbonejs-and-django для использования магистрали с tastypie.
С помощью tastypie вы можете ограничить доступ к api с помощью специальной авторизации/аутентификации.
http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html
Вы можете создать схему авторизации, которая гарантирует, что список объектов будет фильтроваться только как объект, который пользователь "владеет", что-то вроде этого:
class PerUserAuthorization(Authorization):
def apply_limits(self, request, object_list):
if request and hasattr(request, 'user'):
if request.user.is_authenticated():
object_list = object_list.filter(user=request.user)
return object_list
return object_list.none()
Альтернативно/дополнительно вы можете создавать ресурсы, которые возвращают только пользовательские объекты, переопределяя метод ModelResource.apply_authorization_limits
и автоматически связывая пользователя с созданными объектами, переопределяя метод obj_create
, например:
class PerUserModelResource(ModelResource):
def obj_create(self, bundle, request=None, **kwargs):
return ModelResource.obj_create(self, bundle, request, user=request.user)
def apply_authorization_limits(self, request, object_list):
return object_list.filter(user=request.user)
Затем вы можете наследовать от PerUserModelResource и/или сделать PerUserAuthorization авторизацию для ресурса.
class ImageGroupResource(PerUserModelResource):
study = fields.ForeignKey(StudyResource, "study")
uploads = fields.ToManyField('cm.api.UploadResource', 'uploads', null=True)
class Meta:
queryset = ImageGroup.objects.all()
list_allowed_methods = ['get', 'post']
detail_allowed_methods = ['get', 'post', 'put', 'delete']
resource_name = 'cm/imagegroup'
authorization = PerUserAuthorization()
filtering = {
'name': ALL,
'created_dt': ['exact', 'range', 'gt', 'gte', 'lt', 'lte'],
}
Магистраль и django-tastypie хорошо документированы. Потратьте время, чтобы построить простое доказательство концепции и несколько раз прочитать документы. Они идут вместе, как горох и морковь.