Python Django中的单例对象行为

Python Django中的单例对象行为,python,django,django-models,singleton,Python,Django,Django Models,Singleton,考虑一下,我想为访问网站中特定功能的每个用户创建一个单例对象。此对象不是模型 classnavapi: __实例=无 @静力学方法 def get_实例(): “”“静态访问方法。”“” 如果NavApi.\uuu实例为无: 客户() 返回NavApi.\uu实例 在视图文件中 @csrf\u豁免 def get_文件夹_树(请求): 如果request.method==“POST”: nav_api=NavAPI.get_实例() folders=nav_api.listing_文件夹(re

考虑一下,我想为访问网站中特定功能的每个用户创建一个单例对象。此对象不是模型

classnavapi:
__实例=无
@静力学方法
def get_实例():
“”“静态访问方法。”“”
如果NavApi.\uuu实例为无:
客户()
返回NavApi.\uu实例
在视图文件中

@csrf\u豁免
def get_文件夹_树(请求):
如果request.method==“POST”:
nav_api=NavAPI.get_实例()
folders=nav_api.listing_文件夹(request.POST.get('id'))
返回呈现(请求“folder_tree.html”,{'folders':folders,'page1':False})
@豁免
def get_prev_文件夹_树(请求):
如果request.method==“POST”:
nav_api=NavAPI.get_实例()
第1页,folders=nav_api。列表_prev_folder_tree()
返回呈现(请求“folder_tree.html”,{'folders':folders,'page1':page1})
使用Singleton的原因是类对象的成员很少,这些成员定义了文件夹/内容/当前文件夹\u id等的状态,不应该为每个视图创建它。它需要重新使用

但当我尝试以公共方式运行它时,使用ngrok并将链接共享给我的朋友,并测试导航功能

我们最终使用了相同的单例对象。当我浏览文件夹A的内容时,他浏览文件夹B的内容时,我们最终收到了同一文件夹的内容(A或B)。
如何克服这个问题?

Python不是PHP。。。在典型的生产设置中,您的应用程序将由许多长时间运行的进程提供服务,因此您不能指望可靠地使用进程内存作为持久化全局状态的方法(单实例就是全局状态)从一个请求到另一个请求-您可以让同一个用户拥有两个由不同进程提供服务的连续请求,以及一个为两个不同用户提供请求的相同进程

如果要在请求之间保持每个用户的状态,必须使用一些共享存储,这里非常明显的解决方案是会话

我是否可以获得处理类似案例的资源的任何参考

使用会话

哦,是的:如果您所做的只是浏览文件夹,那么您就严重误用了http动词:

POST方法用于请求源服务器接受包含在请求中的实体,作为由请求行中的请求URI标识的资源的新从属


这里您只是在阅读参考资料,所以希望使用GET请求。

我不确定我是否真正理解您的问题。所以你有一个单例,但你真正想要的是每个用户有一个单例,或者你实际上想要每个会话有一个单例(意思是如果同一个用户从两个不同的浏览器访问同一个url,它是否共享该单例)??几乎相同,因此输出就像他在前后浏览文件夹一样,就像mac中的finder一样,但这发生在网页内部,因为我使用API从相应的服务器检索文件夹信息。因此,当他进出文件夹时,我需要根据一个对象跟踪文件夹的详细信息,该对象可以在其他视图中重用。嗨,谢谢你的帮助。我是否可以获得处理类似案例的资源的任何参考?