我正在尝试在 Django 中重构一个相当庞大的视图函数。有太多的变量浮动,这是一个巨大的功能。
理想情况下,我想将视图模块化为逻辑函数。但是,我必须传递函数上下文才能轻松访问变量。
例如:
def complex_view(request, slug):
some complex logic which creates variable abc ...
...
some more complex logic which uses variable abc ...
...
etc.
应该变成这样:
def complex_view(request, slug):
process_X()
...somehow pass variables and context to next function...
process_Y()
...
etc.
def process_X():
...
def process Y():
...
我可以想到一些方法来做到这一点,其中一些在这个页面中被指出:http: //mail.python.org/pipermail/tutor/2009-February/067506.html
一种。在主视图中定义的子功能。这看起来很笨拙,因为很难分辨哪些变量是共享的,哪些不是。
湾。locals()
作为字典传入。这也是很麻烦的,因为现在有两种不同的访问变量的方法:xyz
和contextDict['xyz']
. 并且您必须在 call 中使用一个,并且在堆栈上使用N
next in call 。N+1
C。蛮力将所有变量传递给每个函数调用并返回相关的变量。当涉及很多变量时,这会变得非常乏味。
d。在 C++/C# 中,我会简单地创建一个类MyComplexViewContext
,定义所有共享变量,并创建成员函数来完成这项工作。然后,您可以使用self.xyz
该类中的所有内容。我想我也可以在 Python 中使用这种方法。不确定这是否是最好的方法。
您对在 Python/Django 中执行此操作的首选方式有何看法?