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

2024-04-20 15:14:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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()

如果我可以在整个项目中只保留一个对api和{}的引用,尤其是为了避免使用gmusicapi重复登录api,这将非常方便。我可以在settings.py中声明它们吗?(我猜这是一个糟糕的主意),或者通过其他方式与他们保持持久的联系?在

理想情况下,我会有类似get_api()的函数来检查现有对象是否仍然正常,并根据需要返回或创建一个新的对象。在


Tags: 对象代码client视图apiurlstreamget
3条回答

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

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

另请参见 Creating a Persistent Data Object In Django

  1. 您可以使它们成为应用程序对象或某些对象的属性 在您的 项目-在任何其他需要它之前。在
  2. 如果你把它们放到一个类中,在第一个 导入,然后只在其余部分使用它可以通过导入 几个模块和访问。在

不管怎样,他们的生命都会和死刑一样长。在

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

相关问题 更多 >