Обработка контроллера с отсутствующими параметрами контроллера в турбогенераторах 2
-
21-08-2019 - |
Вопрос
Предположим, у меня есть такой метод контроллера:
@expose()
def search(self, title):
return dict()
Собираюсь в http://сайт/поиск/ вызовет исключение:ТипОшибка:search() принимает ровно 2 аргумента (1 задан).
Ошибка логична, но я бы предпочел справиться с ней более изящно.Является ли использование *args или **kwargs единственным способом избежать ошибки, которую я даже не могу уловить?
РЕДАКТИРОВАТЬ:Думаю, я всегда мог бы использовать title=None, но слишком это может стать некрасивым...
В любом случае, есть ли способ более изящно перехватить исключение и/или обработать несоответствие аргументов?
Спасибо
Решение
Исключение, выдаваемое вам за указание «несовместимой» сигнатуры метода контроллера, происходит только в режиме отладки/разработки.Вам не нужно более изящно обращаться с этим в производственной среде, потому что, как только вы отключите режим разработки, методы контроллера отправят ошибку HTTP 500, когда им не хватает важных параметров.
Возможно, вы захотите рассмотреть соответствующие настройки в вашем development.ini:
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing ANYONE to
# execute malicious code after an exception is raised.
set debug = false
Надеюсь, это был ваш вопрос.
В случае, если вы все равно хотите, чтобы контроллер выполнял свою работу, даже если у него отсутствуют важные параметры, вы должны определить значения по умолчанию, иначе контроллер все равно не сможет выполнять свою работу должным образом.Вопрос, который вам лучше задать себе:Вам просто нужно более красивое сообщение об ошибке или вы хотите, чтобы контроллер мог выполнять свою задачу?В последнем случае лучше всего указывать параметры по умолчанию: *args и **kwargs для каждого метода только для того, чтобы клиент не получил ошибку, по моему мнению, это очень некрасивый хак.
Если вы хотите изменить отображение этих ошибок, обратитесь к /controllers/error.py.
Надеюсь, это помогло,
Том