imn*_*mns 23 javascript python django backbone.js
我正在寻找使用我的django应用程序使backbone.js(以及jQuery)工作,但我有一些问题.我之前从未使用过一个安静的设置,所以我对使用REST的"正确"方式知之甚少.
Backbone使用REST架构,但django默认不支持此功能.看起来像tastypie或活塞是实现REST api的方法.这是否意味着我必须将API用于我通过骨干进行的任何ajax调用?如果这是正确的,是否有任何性能问题或其他我需要注意的奇怪之处?
我的大多数django应用都需要身份验证.我的理解是REST api没有关于用户是否经过身份验证的任何概念,那么我该如何处理呢?我仍然可以使用登录所需的装饰与我的观点或我还做了别的吗?
那么Django的权限框架,我仍然可以设置/检查权限和组吗?
请随意单独回答每个问题,或者如果您看到我的整体混乱,请指出我正确的方向.
其中一些对你们很多人来说可能非常苛刻,但这让我很困惑,所以提前感谢你的帮助.
Sky*_*and 21
您可以将主干集合/模型指向您想要的任何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 for backbone to parse/ingest而不需要活塞或tastypie.但是,是的,这些是使用django进行全面REST的两个很好的解决方案.
这里有一些很好的提示: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()
Run Code Online (Sandbox Code Playgroud)
或者/另外,您可以通过覆盖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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以从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'],
}
Run Code Online (Sandbox Code Playgroud)
Backbone和django-tastypie很好地记录在案.花点时间构建一个简单的概念证明,并阅读几次文档.他们像豌豆和胡萝卜一样走在一起.
| 归档时间: |
|
| 查看次数: |
4972 次 |
| 最近记录: |