簡體   English   中英

django和backbone.js的問題

[英]django and backbone.js questions

我正在尋找使用我的django應用程序使backbone.js(以及jQuery)工作,但我有一些問題。 我之前從未使用過一個安靜的設置,因此我對使用REST的“正確”方式知之甚少。

  1. Backbone使用REST架構,但django默認不支持此功能。 看起來像tastypie或活塞是實現REST api的方法。 這是否意味着我必須將API用於我通過骨干網進行的任何ajax調用? 如果這是正確的,是否有任何性能問題或其他我需要注意的奇怪之處?

  2. 我的大多數django應用都需要身份驗證。 我的理解是REST api沒有關於用戶是否經過身份驗證的任何概念,那么我該如何處理呢? 我仍然可以使用登錄所需的裝飾與我的觀點或我還做了別的嗎?

  3. 那么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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM