django и backbone.js вопросы - PullRequest
       5

django и backbone.js вопросы

23 голосов
/ 10 августа 2011

Я пытаюсь заставить backbone.js (плюс jQuery) работать с моим приложением django, но у меня есть несколько вопросов.Раньше я никогда не использовал успокоительную установку, поэтому очень мало знаю о «правильном» способе использования REST.

  1. Backbone использует архитектуру REST, но django не поддерживает это по умолчанию.Похоже, что вкусный пирог или поршень - это путь для реализации API REST.Означает ли это, что я должен использовать API для любых вызовов ajax, которые я делаю через магистраль?Если это правильно, есть ли какие-либо проблемы с производительностью или другие странности, о которых мне нужно знать?

  2. Большая часть моего приложения django требует аутентификации.Насколько я понимаю, REST API не имеет никакого понятия о том, аутентифицирован ли пользователь или нет, так как мне с этим справиться?Смогу ли я по-прежнему использовать декоратор, необходимый для входа, или я должен сделать что-то еще?

  3. Как насчет структуры разрешений Django, смогу ли я по-прежнему устанавливать / проверять разрешения и группы?

Пожалуйста, не стесняйтесь отвечать на каждый вопроспо отдельности или, если вы можете увидеть мое общее замешательство, пожалуйста, укажите мне правильное направление.

Возможно, некоторые из них являются очень дурацкими для многих из вас, но меня это смущает, поэтому заранее благодарю за вашу помощь.

1 Ответ

21 голосов
/ 11 августа 2011

вы можете указывать коллекции / модели магистрали на любые 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 хорошо документированы.Потратьте время, чтобы создать простое доказательство концепции и прочитайте документы несколько раз.Они идут вместе, как горох и морковь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...