вы можете указывать коллекции / модели магистрали на любые 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 для магистрали для анализа / приема без поршня или вкусного пирога.Но да, это два хороших решения для комплексного REST с django.
Здесь есть несколько полезных советов: http://joshbohde.com/blog/backbonejs-and-django для использования позвоночника с 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'],
}
Backbone и django-tastypie хорошо документированы.Потратьте время, чтобы создать простое доказательство концепции и прочитайте документы несколько раз.Они идут вместе, как горох и морковь.