我的控制器在我的web2py應用程序中變得有點混亂,我想將功能移到另一個地方。清理web2py我的控制器
我最初想到將它們移動到模塊,但我有時會訪問數據庫,並在db.py(我爲用戶id,現在爲日期等)中設置其他參數。
有沒有一種乾淨的方法將這些函數移動到一個新文件中,同時仍然可以訪問我需要的變量?我不反對from db import me, now
我的控制器在我的web2py應用程序中變得有點混亂,我想將功能移到另一個地方。清理web2py我的控制器
我最初想到將它們移動到模塊,但我有時會訪問數據庫,並在db.py(我爲用戶id,現在爲日期等)中設置其他參數。
有沒有一種乾淨的方法將這些函數移動到一個新文件中,同時仍然可以訪問我需要的變量?我不反對from db import me, now
您控制器的操作(即出現在URL中的操作)必須是在控制器文件中定義的功能(即,您不能將它們移動到模塊中)。但是,如果控制器中有不是動作的功能,可以將它們移動到模塊中。假設您將從模型或控制器中調用這些函數,只需將您的db
,me
和now
對象作爲參數傳遞給這些函數即可。另一種選擇是將它們添加到線程本地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系統的工作方式。 – Anthony
您可以創建模塊的文件夾Python文件,並將其導入,就像你如何導入Python庫在你的控制器。但是,你必須給的路徑,這些文件就像
from applications.myApp.modules.myModule import *
這是我對我的包裝的解決方案
如果模塊位於當前應用程序的「模塊」文件夾中,則無需指定完整路徑 - 只需使用模塊名稱即可。例如,如果您在/ applications/myapp/modules中具有mymodule.py,則可以在'myapp'應用程序代碼中的任意位置執行'from mymodule import *'。 – Anthony
目前尚不清楚對我說:你想擁有在控制器文件夾不同的文件你的控制器,這是完全可能的和正常的,或者將它們放在不同的文件夾中,這種AFAIK是不可能的。 – ravenspoint