Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用带有Django、主干和Tastypie的RESTAPI时,相关逻辑在模型创建中的作用是什么?_Rest_Backbone.js_Tastypie - Fatal编程技术网

当使用带有Django、主干和Tastypie的RESTAPI时,相关逻辑在模型创建中的作用是什么?

当使用带有Django、主干和Tastypie的RESTAPI时,相关逻辑在模型创建中的作用是什么?,rest,backbone.js,tastypie,Rest,Backbone.js,Tastypie,我们正在尝试将部分应用程序迁移到主干网和tastypie。我已经设置了RESTAPI,它正在处理一些基本示例。然而,目前我们将ajax请求发布到自定义url时存在一些问题,在该视图中,我们可以执行以下操作 制作相关对象 调用一些相关函数 然而,现在我已经将一些功能切换到使用主干网和RESTAPI,我不确定这些功能应该放在哪里 例如,我想制作一条消息,当我制作一条消息时,我还制作了一条通知,并调用了一个函数向用户添加一些点。差不多 def ajax_send_message(request):

我们正在尝试将部分应用程序迁移到主干网和tastypie。我已经设置了RESTAPI,它正在处理一些基本示例。然而,目前我们将ajax请求发布到自定义url时存在一些问题,在该视图中,我们可以执行以下操作

  • 制作相关对象
  • 调用一些相关函数
然而,现在我已经将一些功能切换到使用主干网和RESTAPI,我不确定这些功能应该放在哪里

例如,我想制作一条
消息
,当我制作一条
消息
时,我还制作了一条
通知
,并调用了一个函数向用户添加一些点。差不多

def ajax_send_message(request):
    ## ... set up some variables ...
    ## Make the new message
    message = Message(user=user, content=message)
    message.save()

    ## Make the notification
    notification = Notification(message=message)
    notification.save()

    ## Give the user points
    user.add_points_for_message();

    return json_response({"status": "ok"})
现在——我应该用JavaScript来完成这一切吗?我还有一个
消息
主干模型

// Create message backbone object
var msg = new Message({content:content, user: user});

// Post to server
msg.save(); 

// Add to backbone collection
messages.add(msg);
我已经研究了tastypie的不同部分,您似乎可以创建自定义URL端点,也可以进行验证,但这似乎不是调用相关方法的正确位置。调用相关的方法似乎与它的其余部分背道而驰——但是它们应该去哪里呢


如果我只想在创建对象时才向主干添加一些逻辑,那么这会发生什么呢

我建议的第一件事是将您的思维方式转换为基于事件的模型,在该模型中,您的代码会对事件做出反应。在上面的示例中,您将模型保存到服务器,然后立即将其添加到集合中。您怎么知道模型已正确保存?这种过程式编程方式在同步的服务器端编程方式中工作得更好

在客户端编程的异步世界中,您发出一个请求,然后设置回调,根据您正在侦听的事件确定接下来将发生什么。在您的情况下,您希望在成功保存消息时做出某种反应,对吗?您可以为保存操作定义成功回调,如下所示:

msg.save({
    success: function(model, response, options) {
        messages.add(model);
        // code to add notification
        // code to add points
    }
});
基本上,您说的是“我想保存这个模型,然后监听一个成功事件。当事件发生时,执行以下代码。”另外请注意,我正在将API返回的模型添加到集合中,因为这正是保存到服务器的对象,所以添加它比添加您创建的模型更合适