Django 的views.py 中应该在哪里导入? [复制]
Posted
技术标签:
【中文标题】Django 的views.py 中应该在哪里导入? [复制]【英文标题】:Where should imports be in Django's views.py? [duplicate] 【发布时间】: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
其中哪一项是推荐的,并且在网站上表现最好?
【问题讨论】:
【参考方案1】:不要这样做。
没有理由在这样的代码中间导入。导入只进行一次;因为几乎可以肯定,在某些时候您的代码将遵循 is_valid 路径,您将需要该导入,因此在此之前推迟导入没有任何好处。
事实上,这可能会使其性能降低;而不是在进程启动时完成所有导入,而是在某人的请求中间进行。
但无论哪种方式,差异都可以忽略不计。为了便于阅读,请将您的导入放在它们所属的位置,在顶部。
【讨论】:
谢谢,我不知道这里的内部工作原理,但是当用户单击表单上的提交按钮时不会再次执行导入吗?是不是又调用了views.py? 是的,视图 function 再次被调用。但这不会触发再次进行导入;它们对文件是全局的。即使是这样,Python 也不会在已经导入模块时重新导入它。 谢谢,这让事情变得很清楚。【参考方案2】:文件顶部的导入模块完全没问题,这样做是recommended way。
它不会增加任何运行时开销,因为导入只完成一个,而不是在每个请求中完成(就像在 php 中一样)。
【讨论】:
以上是关于Django 的views.py 中应该在哪里导入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章