5

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

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

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. 我可以在其中声明它们settings.py吗?(我猜这是一个糟糕的主意),还是通过其他方式与他们保持持久的联系?

理想情况下,我将拥有类似get_api()检查现有对象是否仍然正常并返回它或根据需要创建一个新对象的功能。

4

3 回答 3

12

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

于 2013-08-09T09:15:48.540 回答
0
  1. 您可以使它们成为您的应用程序对象或在项目顶层声明的其他应用程序对象的属性 - 在其他任何需要它之前。
  2. 如果您将它们放入一个类,该类在第一次导入时被实例化,然后仅用于其余部分,则它可以被多个模块导入并访问。

无论哪种方式,他们的生命都将与处决一样长。

于 2013-08-08T16:35:39.043 回答
0

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

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

另请参阅 在 Django 中创建持久数据对象

于 2018-07-07T23:25:02.167 回答