【问题标题】:Where should imports be in Django's views.py? [duplicate]Django 的views.py 中应该在哪里导入? [复制]
【发布时间】:2016-09-22 22:10:19
【问题描述】:

关于网络应用程序的最少运行时间,将我的导入保存在 views.py 中的理想位置是什么

假设我想使用外部模块验证和处理一些表单条目。我当前的代码:

from django.shortcuts import render

from .forms import *

import re
import module1
import module2

def index(request):
    form = MyForm()
    if request.method == 'POST':
        form = MyForm(request.POST)

        if form.is_valid():
            #
            #Process my stuff here using re, module1, module2
            #

return render(request, 'index.html', context)

但是,如果条件if form.is_valid(): 失败,提前导入模块 re、module1、module 2 有什么好处?或者条件if request.method == 'POST': 失败?那是表单从未提交的时候。

在满足这些条件后导入这些模块(因为那是实际需要它们的时候)在这些条件失败时会导致程序或 webapp 的运行时开销减少吗?在不需要时避免不必要的导入?

我的想法的伪代码:

if form.is_valid():
    import re
    #Perform some regex matches and stuff
    if (above re matches succeed):
        import module1
        #Process my stuff here using module1 here
        #and so on importing modules only when they are required

其中哪一项是推荐的,并且在网站上表现最好?

【问题讨论】:

    标签: python django import python-import


    【解决方案1】:

    不要这样做。

    没有理由在这样的代码中间导入。导入只进行一次;因为几乎可以肯定,在某些时候您的代码将遵循 is_valid 路径,您将需要该导入,因此在此之前推迟导入没有任何好处。

    事实上,这可能会使其性能降低;而不是在进程启动时完成所有导入,而是在某人的请求中间进行。

    但无论哪种方式,差异都可以忽略不计。为了便于阅读,请将您的导入放在它们所属的位置,在顶部。

    【讨论】:

    • 谢谢,我不知道这里的内部工作原理,但是当用户单击表单上的提交按钮时不会再次执行导入吗?是不是又调用了views.py?
    • 是的,视图 function 再次被调用。但这不会触发再次进行导入;它们对文件是全局的。即使是这样,Python 也不会在已经导入模块时重新导入它。
    • 谢谢,这让事情变得很清楚。
    【解决方案2】:

    文件顶部的导入模块完全没问题,这样做是recommended way

    它不会增加任何运行时开销,因为导入只完成一个,而不是在每个请求中完成(就像在 PHP 中一样)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2010-12-25
      相关资源
      最近更新 更多