【问题标题】:django and backbone.js questionsdjango 和backbone.js 问题
【发布时间】:2011-10-24 08:16:02
【问题描述】:

我正在考虑让backbone.js(加上jQuery)与我的django 应用程序一起工作,但我有一些问题。我以前从未使用过 RESTful 设置,因此我对使用 REST 的“正确”方式知之甚少。

  1. Backbone 使用 REST 架构,但 django 默认不支持。看起来美味派或活塞是实现 REST api 的方式。这是否意味着我必须将 API 用于通过骨干网进行的任何 ajax 调用?如果这是正确的,我是否需要注意任何性能问题或其他异常情况?

  2. 我的大多数 django 应用程序都需要身份验证。我的理解是 REST api 没有任何关于用户是否经过身份验证的概念,那么我该如何处理呢?我仍然可以在我的视图中使用登录所需的装饰器,还是我有做其他事情?

  3. Django 的权限框架怎么样,我还能设置/检查权限和组吗?

请随意单独回答每个问题,或者如果您能看出我的整体困惑,请指出正确的方向。

其中一些可能对你们中的许多人来说非常陌生,但这让我感到困惑,所以提前感谢您的帮助。

【问题讨论】:

    标签: javascript python django backbone.js


    【解决方案1】:

    您可以将骨干集合/模型指向您想要的任何 url,并在您的骨干“子类”中解析响应。

    型号.url:

    http://documentcloud.github.com/backbone/docs/backbone.html#section-43

    Collection.parse:

    http://documentcloud.github.com/backbone/docs/backbone.html#section-69

    您可以设置一次性请求处理程序,该处理程序可以返回一些 json 供骨干网解析/摄取,无需活塞或美味派。但是,是的,这是使用 django 进行综合 REST 的两个很好的解决方案。

    这里有一些很好的提示:http://joshbohde.com/blog/backbonejs-and-django 将骨干与美味派一起使用。

    使用 sweetpie,您可以通过自定义授权/身份验证来限制对 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 有很好的文档记录。花点时间构建一个简单的概念证明并通读几遍文档。它们像豌豆和胡萝卜一样在一起。

    【讨论】:

    • 感谢您的回复。权限和组呢,有没有可能实现和使用呢?
    • 当然,只需使用相同的方法,而不是仅使用用户的身份来应用限制,而是使用组状态或任意条件。
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多