[英]django and backbone.js questions
我正在尋找使用我的django應用程序使backbone.js(以及jQuery)工作,但我有一些問題。 我之前從未使用過一個安靜的設置,因此我對使用REST的“正確”方式知之甚少。
Backbone使用REST架構,但django默認不支持此功能。 看起來像tastypie或活塞是實現REST api的方法。 這是否意味着我必須將API用於我通過骨干網進行的任何ajax調用? 如果這是正確的,是否有任何性能問題或其他我需要注意的奇怪之處?
我的大多數django應用都需要身份驗證。 我的理解是REST api沒有關於用戶是否經過身份驗證的任何概念,那么我該如何處理呢? 我仍然可以使用登錄所需的裝飾與我的觀點或我還做了別的嗎?
那么Django的權限框架,我仍然可以設置/檢查權限和組嗎?
請隨意單獨回答每個問題,或者如果您看到我的整體混亂,請指出我正確的方向。
其中一些對你們很多人來說可能非常苛刻,但這讓我很困惑,所以提前感謝你的幫助。
您可以將主干集合/模型指向您想要的任何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()
或者/另外,您可以通過覆蓋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很好地記錄在案。 花點時間構建一個簡單的概念證明,並閱讀幾次文檔。 他們像豌豆和胡蘿卜一樣走在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.