我们正试图将我们的一些应用程序用于使用骨干和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部分 - 但那么他们应该去哪里?
如果我想仅在创建对象时向骨干添加一些逻辑,那么它会去哪里?
答案 0 :(得分:2)
我建议的第一件事是将您的思维模式转换为基于事件的模型,您的代码会对事件作出反应。在上面的示例中,您将模型保存到服务器,然后立即将其添加到集合中。你怎么知道模型保存正确?编程的程序风格在同步的服务器端编程风格中效果更好。
在客户端编程的异步世界中,您发出请求,然后设置回调,以确定接下来会发生什么,具体取决于您正在侦听的事件。在您的情况下,您希望在成功保存邮件时以某种方式做出反应,对吗?您可以为保存操作定义成功回调,如下所示:
msg.save({
success: function(model, response, options) {
messages.add(model);
// code to add notification
// code to add points
}
});
基本上,您说“我想保存此模型,然后监听成功事件。当事件进入时,执行以下代码。”另请注意,我将从API返回的模型添加到集合中,因为这是持久保存到服务器的确切对象,因此它比您创建的模型更适合添加。