Очистка web2py моих контроллеров - PullRequest
7 голосов
/ 25 июля 2011

Мои контроллеры немного загромождены в моем приложении web2py, и я хотел бы переместить функции в другое место.

Сначала я думал о перемещении их в модули, но иногда я получаю доступ к базе данных, и в db.py устанавливаются другие параметры (меня для идентификатора пользователя, теперь для даты и т. Д.).

Есть ли чистый способ переместить эти функции в новый файл, сохраняя при этом доступ к нужным мне переменным? Я не против чего-то вроде from db import me, now

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Действия вашего контроллера (то есть действия, которые появляются в 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.
3 голосов
/ 27 июля 2011

вы можете создавать файлы Python в папке модулей и импортировать их так же, как вы импортируете библиотеки Python в свои контроллеры.Но вы должны указать путь к этим файлам, например

from applications.myApp.modules.myModule import *

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

...