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 中使用多个数据库,如何仅迁移所需的模型表
如何使用装饰器视图在 uicollection 视图中实现所需的设计