如何处理Django / Tastypie中的操作?

时间:2012-09-07 10:43:06

标签: python django tastypie

我正在编写一个Web应用程序,其目的是充当应用程序和Amazon API之间的中间层。我认为REST样式API适合并选择Tastypie来简化实现。

我已经创建了一个名为Instance的模型和一个Tastypie资源。为简化一点,假设该资源的PUT将启动EC2实例,而DELETE将停止它。在需要与亚马逊API进行通信的地方,处理这些操作的适当位置在哪里?它应该放在资源代码,模型代码还是其他地方?

此外,将错误消息返回给客户端的最合适方法是什么?

1 个答案:

答案 0 :(得分:0)

我会这样做:

  • PUT创建一个新实例并将其存储在数据库中
  • Instance模型上的Django Post Save Signal执行特殊操作:

在models.py中:

@receiver(post_save, sender=Instance, dispatch_uid="create_instance")
def create_instance(sender, **kwargs):
    instance = kwargs['instance']
    created = kwargs['created']
    raw = kwargs['raw']
    if instance and created and not raw:
        from my_project.my_app.tasks import create_ec2_instance
        result = create_ec2_instance(instance)
        if result:
             instance.started = True
             instance.save()
在tasks.py中

def create_ec2_instance(instace):
    # do the calls to ec2 to create the instance and get a result form it
    return the_result_from_ec2