我想知道 - 人们如何处理在django视图中导入大量常用模块?最有效的方法是什么?
例如,我有一些观点,如
admin_views.py
search_views.py
.
.
从我所看到的,他们每个人都需要使用HttpResponse或其他常用的模块。此外,他们中的一些人需要像BeautifulSoup这样的东西,而其他人则需要其他东西(md5,auth等)。
我在启动项目时所做的是创建一个包含大部分常见导入的include_all.py
,然后在视图中添加这些特定内容。所以,我有类似的东西,
admin_views.py
from include_all import *
...
[list of specific module imports for admin]
...
search_views.py
from include_all import *
...
[list of specific module imports for search]
...
随着时间的推移,include_all成为一个misc文件,其中包含任何需要的内容 - 因此,许多视图最终导入了他们不需要的模块。
这是否会影响效率?也就是说,python(django?)是否导入所有模块一次并存储/缓存它们,以便需要它们的任何其他视图不必再次导入它?或者我调用这个长文件的方法非常低效 - 我最好坚持在每个视图中单独导入这些模块?
这种事情是否有最佳做法?
谢谢!
答案 0 :(得分:6)
Python本身保证模块只加载一次(除非显式调用reload
,这不是这里的情况):在第一次之后,该模块的import
直接绑定其名称来自sys.modules[themodulename]
,一个非常快速的操作。所以Django不需要进行任何进一步的优化,你也不需要。
最佳做法是避免生产代码中的from ... import *
(使每个名称来自更清晰,更易于维护,便于测试等)和导入模块,“单独地”放置它,确切位置它们是需要的(通过绑定更少的名称,可以节省几微秒,绝对不会浪费任何,但“明确比隐含更好” - 清晰度,可读性,可维护性 - 无论如何都是主要的考虑因素。) p>
答案 1 :(得分:0)
我猜你可以把经常使用的导入打到你的__init__.py文件中。
答案 2 :(得分:0)
Django不是CGI(或PHP)。您的应用程序是一个(或几个)长期运行的Python进程。无论启动需要多长时间,每个HTTP请求都只会调用您已经加载的视图函数。