Очистка 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 *

это мое решение для моих оберток

Другие вопросы по тегам