清理 web2py 我的控制器

发布于 2024-11-26 05:01:23 字数 201 浏览 2 评论 0原文

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

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

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

My controllers are getting a bit cluttered in my web2py app, and I would like to move functions to another place.

I was initially thinking of moving them to modules, but I access the db sometimes, and have other parameters set in db.py (me for user id, now for the date, etc.).

Is there a clean way to move these functions to a new file while still having access to the variables I need? I'm not opposed to something like from db import me, now

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热血少△年 2024-12-03 05:01:23

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

在模型中:

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

在模块中:

from globals import current

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

You controller actions (i.e., the actions that appear in URLs) have to be functions defined in a controller file (i.e., you cannot move them to a module). However, if there are functions in your controller that are not actions, you may move those to a module. Assuming you will call those functions from a model or controller, you can simply pass your db, me, and now objects to those functions as arguments. Another option is to add them to the thread local current object, which can be accessed from modules. To do so:

In a model:

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

In a module:

from globals import current

def func(*args):
    db=current.app.db
    # etc.
月朦胧 2024-12-03 05:01:23

您可以在模块文件夹中创建 python 文件并导入它们,就像在控制器中导入 python 库一样。但是你必须给出这些文件的路径,就像

 from applications.myApp.modules.myModule import *

这是我的包装器的解决方案

you can create python files in modules folder and import them just like how you import python libraries in your controllers. But you have to give the path to those files like

 from applications.myApp.modules.myModule import *

this is my solution for my wrappers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文