2013-11-15 20 views
1

我有一個基於django rest框架的rest api,它包含創建對象的下一個方法,該對象以的JSON格式獲取數據,如果數據是正確的,則會創建對象,否則以JSON格式返回錯誤。如何發佈json到backbone.js中的api方法?

def create_obj(request): 
    stream = StringIO(request.raw_post_data) 
    data = JSONParser().parse(stream) 
    serializer = ObjSerializer(data=data, many=True) 
    if serializer.is_valid(): 
     serializer.save() 
     return JSONResponse(serializer.data, status=201) 
    else: 
     return JSONResponse(serializer.errors, status=400) 

另外我試圖在backbone.js上創建一個模塊,將表單數據中的輸入發佈到此方法。我對js非常陌生,特別是對於骨幹網,我很不理解骨幹網如何與服務器api協同工作。我有一些像

App.module('Createobj', function(Mod, App, Backbone, Marionette, $, _) { 

Mod.id = 'create-obj'; 
Mod.controllers = {}; 

Mod.Obj = Backbone.Model.extend({ 
    defaults: { 
     real_ref : '', 
     share : '' 
    } 
    }); 

Mod.View = Marionette.ItemView.extend({ 
     id: 'create-obj-page', 
     template: '#tpl-create-obj-page', 
     model: Mod.obj, 

     ui: { 
      'real_ref': 'input[name=real_ref]', 
      'share': 'input[name=share]', 
      'error': 'div.error' 
     }, 

     hammerEvents: { 
      'tap button': 'submit:tap' 
     }, 

     hammerOptions: { 
      tap: true 
     }, 

     showError: function(message) { 
      this.ui.error 
       .text(message) 
       .show(); 
     }, 

     hideError: function() { 
      this.ui.error.hide(); 
     }, 
}); 

Mod.Controller = SRClient.PageController.extend({ 
    id: Mod.id + '.main', 
    ViewClass: Mod.View, 

    setup: function() { 
    this.listenTo(this.view, 'submit:tap', this.submit); 
    }, 

    submit: function() { 
    var real_ref = this.view.ui.real_ref.val(), 
     share = this.view.ui.share.val(); 

    if (!real_ref || !share) { 
     this.view.showError($t('create-obj.error_empty_fields')); 
     return; 
     } 

    App.vent.trigger('loading-screen:show', $t('app.please_wait')); 

    var obj = new Mod.obj({ 
     real_ref : this.view.ui.real_ref.val(), 
     share : this.view.ui.share.val() 
     }); 

    }}); 

Mod.addInitializer(function() { 
    Mod.Controllers = { 
    default: Mod.Controller 
    }; 
    App.pageControllers[Mod.id] = Mod; 
}); 
}); 

我需要做什麼,這些數據我輸入的網頁表單發送到'myapp/create_obj'以JSON格式?謝謝!

回答

2

Backbone期望一個RESTful api,因此REST不像端點那樣是一個像create_obj這樣的動作,REST可以與資源和HTTP方法協同工作。你的情況,你可以有這樣的型號:

var Obj = Backbone.Model.extend({ 
    defaults: { 
    real_ref : '', 
    share : '' 
    } 
}); 

和收集這樣

var Objects = Backbone.Collection.extend({ 
    url: 'myapp/obj', 
    model: Obj 
}); 

收集具有propetry url指定的服務器端點。所以操作將

  • POST/MYAPP/OBJ /用於創建一個新的項目
  • GET/MYAPP/OBJ /:ID /如果你想中檢索一個特定項目
  • GET/MYAPP/OBJ/retreving整個列表
  • PUT/MYAPP/OBJ /:ID /更新項目
  • DELETE/MYAPP/OBJ /:ID /刪除項目

Tastypie是一個很好的框架來創建RESTfu與Django一起使用。