Django - 如何进行视图所需的大型初始化(APIView)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django - 如何进行视图所需的大型初始化(APIView)相关的知识,希望对你有一定的参考价值。

我有一个简单的APIView:

class MyView(APIView):
    symspell = Symspell()

    def post(self, request):
        res = self.symspell.do_something()
        return res

这是我的问题:我的班级Symspell的构造函数需要运行30秒。因此,当我真正运行或对我的应用程序执行任何操作(例如./manage.py migrate)时,它会向运行时添加30秒。所以我的问题是:

  • 有一个更好的方法吗 ? (在视图中使用带有长构造函数的类)
  • 我只能在运行服务器而不进行迁移等其他操作时构建此视图吗?
  • 我可以在几个视图中使用相同的类吗?

谢谢你的帮助 !

答案

那这个呢 ?

class Symspell(object):
    var1 = None
    var2 = None
    def my_func(self):
        pass

class MyView(APIView, SimpleClass):
    def post(self, request):
     # do something with self.var1 , self.var2, self.my_func()
另一答案

有一个更好的方法吗 ? (在视图中使用带有长构造函数的类)

我不这么认为,虽然我从未见过如此沉重的构造函数,所以不要认为我是这方面的权威。

我只能在运行服务器而不进行迁移等其他操作时构建此视图吗?

如果你在initial()APIView函数中运行构造函数,这是可行的。

我可以在几个视图中使用相同的类吗?

我认为你的意思是在几个视图中使用相同的对象?如果是这样,您可以将该类实现为单例,以避免每次都重新运行构造函数。

以上是关于Django - 如何进行视图所需的大型初始化(APIView)的主要内容,如果未能解决你的问题,请参考以下文章

如果在 django 中使用多个数据库,如何仅迁移所需的模型表

Django - 获取反转url所需的参数名称

Django - 如何从多个模型中获取所需的数据

如何使用装饰器视图在 uicollection 视图中实现所需的设计

Django:引导输入组未使用表单呈现所需的 HTML/CSS

有没有办法计算将视图从帧 A 转换到帧 B 所需的 CGAffineTransform?