在Django视图中高效导入模块

2024-05-14 20:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想-人们如何处理在django视图中导入大量常用模块的问题?什么是最好的方法来有效地做到这一点呢?在

例如,我有一些观点,比如

admin_views.py
search_views.py
.
.

据我所见,它们中的每一个都需要使用HttpResponse或其他常用的模块。此外,他们中的一些人需要像beauthulsoup这样的东西,而另一些人需要其他东西(md5,auth,et al。在

我在开始这个项目时所做的是制作一个include_all.py,其中包含了我大多数常用的导入,然后在视图中添加这些特定的内容。所以,我有点像

管理员_视图.py

^{pr2}$

搜索_视图.py

from include_all import *
... 
[list of specific module imports for search]
...

随着时间的推移,include帴all变成了一个misc文件,其中包含了任何需要的内容,因此,许多视图最终导入了他们不需要的模块。在

这会影响效率吗?也就是说,python(django?)导入所有模块一次并存储/缓存它们,这样任何其他需要它们的视图都不必再次导入它们?或者,我调用这个长文件的方法是一种非常低效的方法——我最好坚持在每个视图中单独导入这些模块?在

这类事情也有什么最佳实践吗?在

谢谢!在


Tags: 模块文件django方法py视图内容search
3条回答

Django不是CGI(或PHP)。你的应用程序是一个(或几个)长时间运行的Python进程。不管启动需要多长时间,每个HTTP请求都将简单地调用(已经加载)视图函数。在

Python本身保证一个模块只加载一次(除非显式调用reload,这里不是这样):第一次之后,该模块的import只直接从sys.modules[themodulename]绑定其名称,这是一个非常快的操作。所以Django不需要做任何进一步的优化,你也不需要。在

最佳实践是避免在生产代码中使用from ... import *(使每个名称的来源更清晰、更易于维护、便于测试等),并像您所说的那样“单独”导入模块,确切地说是在需要它们的地方(通过可能绑定更少的名称,可以节省几微秒,而且绝对不会浪费任何时间,但“显式优于隐式”的清晰性、可读性、可维护性是主要考虑因素)。在

我想你可以把你经常使用的导入文件放到你的文件中。在

相关问题 更多 >

    热门问题