pyramid_handlers не работает

#python #pyramid #restful-architecture #akhet

#python #пирамида #restful-архитектура #ахет

Вопрос:

В настоящее время я переношу проект с Pylons 1.0 на Pyramid.

Моя проблема до сих пор заключается в том, как использовать restful routes в Pyramid. В настоящее время я использую pyramid_handlers, так как это показалось хорошим началом. Я использую Akhet.

Итак, вот две важные строки в моем маршруте:

 config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts")
# or 
config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new")
  

Мое действие:

 @action(name="new_account", renderer='accounts/new.mako', request_method='GET')
  

Ошибки:

  TypeError: 'Accounts' object is not callable
 or
 ValueError: Could not convert view return value "{}" into a response Object.
  

Учетные записи… пока все хорошо, легко понять, что pyramid_handlers, похоже, не регистрируется нормально или не обрабатывает имя, как должно … тем не менее request.matched_route , у меня есть «new_account».

Если я добавлю «action =’new'» в определение маршрута, он найдет функцию, но не будет прослушивать определение действия. Другими словами, он не сможет найти средство визуализации и ожидать объект ответа. request_method Параметр на самом деле еще ничего не делает, поэтому его удаление не меняет никаких результатов.

Короче говоря, @action(name="..." не работает. Пирамиде не удается найти функцию самостоятельно, и если имя функции определено, ей не удается выполнить оператор действия.

Понятия не имею, что я делаю не так.

Правильный способ сделать это.

 config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new_account")
  

Редактировать

route_name вероятно, будет использоваться функциями генератора URL. В то время как action — это фактическое имя в @action . Как я понял, @action name было route_name, а не именем действия. Теперь это имеет больше смысла.

Ответ №1:

Ну, для вызова add_handler требуется шаблон действия. Так что это либо добавление {action} к шаблону URL, либо установка action= в качестве аргумента. Эти действия должны соответствовать именам, определенным в @action декораторах. В вашем примере вы назвали действие new_account , но вы вызвали add_handler с помощью действия new . Таким образом, они неправильно подключены.

Комментарии:

1. Я ожидал другого поведения .. именем в действии будет маршрут, который должен совпадать, а не действие, которое должно совпадать.. Вероятно, он получил новую правильную функцию, поскольку именно так я ее назвал. Но ожидал ResponseObject, поскольку «новый» не был определен ни в одном @action… Теперь это имеет большой смысл.