Очистка web2py моих контроллеров
Мои контроллеры немного загромождены в моем приложении web2py, и я хотел бы переместить функции в другое место.
Сначала я думал о перемещении их в модули, но иногда я получаю доступ к базе данных, и в db.py устанавливаются другие параметры (я для идентификатора пользователя, теперь для даты и т. Д.).
Есть ли чистый способ переместить эти функции в новый файл, сохраняя при этом доступ к нужным мне переменным? Я не против чего-то вроде from db import me, now
2 ответа
Действия вашего контроллера (то есть действия, которые появляются в 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.
Вы можете создавать файлы Python в папке модулей и импортировать их так же, как вы импортируете библиотеки Python в свои контроллеры. Но вы должны указать путь к этим файлам, как
из application.myApp.modules.myModule import *
это мое решение для моих оберток