使用带有Django,Backbone和Tastypie的REST API时,相关逻辑在哪里进行模型创建?

时间:2013-07-16 00:45:25

标签: rest backbone.js tastypie

我们正试图将我们的一些应用程序用于使用骨干和tastypie。我已经设置了REST api,它正在研究一些基本的例子。但是,有一些问题,目前我们向自定义网址发布ajax请求,并在该视图中执行一些操作,如

  • 制作相关对象
  • 调用一些相关的功能

但是,既然我已经将部分功能转换为使用主干和REST API,我不确定应该在哪里进行!

例如,我有一个Message的视图,当我创建Message时,我还创建了一个Notification并调用了一个函数来向用户添加一些点。像

这样的东西
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中完成所有操作吗?我也有一个Message Backbone模型。

// 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端点,并且还可以进行验证,但这似乎不是调用相关方法的正确位置。似乎调用相关方法违背了它的REST部分 - 但那么他们应该去哪里?

如果我想仅在创建对象时向骨干添加一些逻辑,那么它会去哪里?

1 个答案:

答案 0 :(得分:2)

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

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

msg.save({
    success: function(model, response, options) {
        messages.add(model);
        // code to add notification
        // code to add points
    }
});

基本上,您说“我想保存此模型,然后监听成功事件。当事件进入时,执行以下代码。”另请注意,我将从API返回的模型添加到集合中,因为这是持久保存到服务器的确切对象,因此它比您创建的模型更适合添加。