Django:保持对对象的持久引用?

时间:2013-08-08 15:59:38

标签: python django

我很高兴接受这可能是不可能的,更不用说明智了,但是有可能保持对我创建的对象的持久引用吗?

例如,在我的一些观点中,我的代码看起来有点像这样(为了清晰起见而简化):

api = Webclient()
api.login(GPLAY_USER,GPLAY_PASS)
url = api.get_stream_urls(track.stream_id)[0]

client = mpd.MPDClient()
client.connect("localhost", 6600)
client.clear()
client.add(url)
client.play()
client.disconnect()

如果我可以在整个项目中保留对apiclient的一个引用,那将非常简洁,尤其是为了避免使用gmusicapi重复api登录。我可以在settings.py中声明它们吗? (我猜这是一个可怕的想法),或者通过其他方式保持与持久性的连接?

理想情况下,我会使用像get_api()这样的函数来检查现有对象是否正常并返回它或根据需要创建一个新对象。

3 个答案:

答案 0 :(得分:8)

每个应用程序都无法实例化一次,因为您几乎肯定会拥有多个服务器进程,并且不能跨进程轻松共享对象。但是,每个过程一个肯定是可能的,也是值得的。为此,您只需要在相关文件中的模块级别实例化它(例如views.py)。这意味着当Django首次导入该文件时(在该过程中),它将自动实例化,您可以将其称为该文件中的全局变量。只要进程执行,它就会持续存在,并且当创建新进程时,将实例化新的全局变量。

答案 1 :(得分:0)

  1. 您可以将它们作为应用程序对象或某些属性的属性 在您的顶级声明的其他应用程序对象 项目 - 在其他任何需要之前。
  2. 如果你将它们放入一个在第一个实例化的类中 导入然后只用于其余可以导入的 几个模块并访问。
  3. 无论哪种方式,他们的生命都会延长执行时间。

答案 2 :(得分:0)

您不能持久化对象引用,但可以将其存储在内存django缓存中或memcached django缓存中。

Django缓存 https://docs.djangoproject.com/en/dev/topics/cache/

另请参阅 Creating a Persistent Data Object In Django