基于 Django 1.9 class 的视图单例

Django 1.9 class-based view singleton

Django 中基于 class 的视图存在一个问题,我找不到简单的解决方案。

让我们创建一些基于 class 的视图:

class userspaceDispatcher(View):
    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.someSharedStuff = MongoConnector() # As example

    def dispatch(self, request, *args, **kwargs):
        # Some code here, it does not matter
        return dispatchResult

然后,当我们进行 HTTP 调用时,将传递到我的视图,每次都会创建 userspaceDispatcher 的新实例。 例如,要处理请求,我需要 MongoDB 连接器。正如我在探查器上看到的那样,连接器的初始化需要 5-7 毫秒。

所以问题是 - 如何使视图 class 成为单例?不是每次请求都要初始化吗?

这种事情的解决方案与基于 class 的视图和基于函数的视图相同。在模块级别定义视图外的共享值,因此每个进程只会实例化一次。