【问题标题】:Cleaning up web2py my controllers清理 web2py 我的控制器
【发布时间】:2011-07-24 22:51:35
【问题描述】:

我的控制器在我的 web2py 应用程序中变得有点杂乱,我想将功能移动到另一个地方。

我最初考虑将它们移动到模块中,但我有时会访问数据库,并且在 db.py 中设置了其他参数(我用于用户 ID,现在用于日期等)。

有没有一种干净的方法可以将这些函数移动到一个新文件中,同时仍然可以访问我需要的变量?我不反对from db import me, now

【问题讨论】:

  • 我不清楚:您是否要将控制器放在控制器文件夹中的不同文件中,这是完全可能且正常的,或者将它们放在不同的文件夹中,AFAIK 不是可能。

标签: web2py


【解决方案1】:

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

在模型中:

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

在一个模块中:

from globals import current

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

【讨论】:

  • 我不确定。我不会想太多。请注意,上述模式是框架的 Auth、Crud 和 Mail 系统的工作方式。
【解决方案2】:

您可以在 modules 文件夹中创建 python 文件并导入它们,就像在控制器中导入 python 库一样。但是您必须提供这些文件的路径,例如

 from applications.myApp.modules.myModule import *

这是我的包装器解决方案

【讨论】:

  • 如果模块在当前应用程序的'modules'文件夹中,你不需要指定完整路径——只使用模块名。例如,如果您在 /applications/myapp/modules 中有 mymodule.py,您可以在“myapp”应用程序代码中的任何位置执行from mymodule import *
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
相关资源
最近更新 更多