【问题标题】:How to post json to api method in backbone.js?如何将json发布到backbone.js中的api方法?
【发布时间】:2013-11-29 03:23:26
【问题描述】:

我有基于 django rest 框架的 rest api,包括创建对象的下一个方法,它在'myapp/create_obj/' 上以 JSON 格式获取数据,如果数据正确,将创建对象,否则它也会返回错误JSON 格式。

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;
});
});

我需要做什么,我在 webform 中输入的数据以 json 格式发送到'myapp/create_obj'?谢谢!

【问题讨论】:

    标签: javascript django json rest backbone.js


    【解决方案1】:

    Backbone 需要一个 RESTful api,因此 REST 不是像 create_obj 这样的操作的端点,而是与资源和 HTTP 方法一起使用。在您的情况下,您可以拥有这样的模型:

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

    还有这样的收藏

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

    该集合有一个属性url,它指定了服务器端点。所以操作将是

    • POST /myapp/obj/ 用于创建新项目
    • GET /myapp/obj/:id/ 如果你想检索一个特定的项目
    • GET /myapp/obj/ 检索整个列表
    • PUT /myapp/obj/:id/ 更新项目
    • DELETE /myapp/obj/:id/ 删除一个项目

    Tastypie 是一个用 Django 创建 RESTful api 的好框架。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2014-07-23
      • 2014-09-11
      • 1970-01-01
      相关资源
      最近更新 更多