清理Web2py控制器

7
我的web2py应用程序中,控制器变得有些杂乱无章,我希望将函数移动到其他地方。
起初,我想把它们移到模块中,但有时我需要访问db,并在db.py中设置其他参数(例如用户ID的me,日期的now等)。
有没有一种干净的方法可以将这些函数移动到一个新文件中,同时仍然可以访问我需要的变量?我不反对使用类似from db import me, now这样的东西。

我不太清楚:您是想在控制器文件夹中使用不同的文件来存储控制器(这是完全可行和正常的),还是想将它们放在另一个文件夹中,但据我所知,这是不可能的。 - ravenspoint
2个回答

6

您的控制器操作(即出现在URL中的操作)必须是在控制器文件中定义的函数(即不能将它们移动到模块中)。然而,如果您的控制器中有不是操作的函数,您可以将其移到一个模块中。假设您将从模型或控制器调用那些函数,您可以简单地将您的dbmenow对象作为参数传递给这些函数。另一个选项是将它们添加到线程本地的current对象中,该对象可以从模块中访问。要这样做:

在模型中:

from globals import current
current.app.db = db
# etc.

在一个模块中:
from globals import current

def func(*args):
    db=current.app.db
    # etc.

1
我不确定。我认为不会太多。请注意,上述模式是框架的Auth、Crud和Mail系统的工作方式。 - Anthony

3

您可以在modules文件夹中创建Python文件,并像在控制器中导入Python库一样导入它们。但是,您必须像下面这样给出这些文件的路径:

 from applications.myApp.modules.myModule import *

这是我为我的包装器提供的解决方案。


2
如果模块在当前应用程序的“modules”文件夹中,则无需指定完整路径--只需使用模块名称即可。例如,如果您在/applications/myapp/modules中有mymodule.py,则可以从“myapp”应用程序代码的任何位置仅使用from mymodule import * - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接