使用Piston / Django-tastypie和jsonrpc在Django中初始化API内部数据的正确方法

时间:2012-03-07 15:19:17

标签: django api django-piston tastypie

在一些API实现之后,在Python中使用jsonrpclib,我需要在Django Framework项目中迁移它们。我是Django和Piston / tastypie的新手,但在我的Python应用程序中使用jsonrpc / xmlrpc库有一些经验。

到目前为止,我已经开发了一些模块,ServiceClass附加到处理请求的jsonrpc服务器的寄存器并调用ServiceClass中的方法。

当类附加到寄存器时,会创建一个新的ServiceClass实例,加载所有初始数据并将其保存在内存中,因此通过jsonrpc调用的每个方法都可以访问该实例中的内部值。

现在,我正在尝试用活塞或Tastypie在Django中做同样的事情。我按照这个链接http://www.robertshady.com/content/creating-very-basic-api-using-python-django-and-piston和其他资源,我读到的所有文档都很清楚,显示了使用它的正确方法:

  • 修改url.py以将“/ api /”之类的请求映射到特定处理程序。
  • 在api应用程序中添加一个handler.py,扩展了BaseHandler 活塞/ Tastypie。

因此,当我创建扩展BaseHandler的Handler实例时,我想知道它是否正确使用Django和API,在handler.py中创建我的ServiceClass实例(初始化数据,提供方法) 。这个Handler类在服务器启动时是否实例化了一次?如果我的ServiceClass依赖某些模型从中加载数据怎么办?

我想避免框架在每次新请求到达/ api / application时实例化我的类。

我很高兴听到任何建议, 谢谢,

1 个答案:

答案 0 :(得分:1)

特别是对于活塞......你不应该在实例方面真正使用处理程序。它更像是使用类属性设置的元类。这些属性控制处理程序将绑定的whicch模型(如果有)。它应该显示哪些字段或它支持哪些方法。

通常,请求会输入您的某个方法,然后您可以根据需要处理请求,作为隔离状态。如果它需要使用共享资源或使用模型进行查询,则该部分由您自己决定,并从某些导入的资源中共享。你说你需要一个模型,这就是为什么你将它作为一个类属性绑定到处理程序然后查询它。你不应该在处理程序上存储状态。