обратный URL торнадо с почтовым запросом - PullRequest
0 голосов
/ 30 августа 2018

У меня есть служба отчетов в приложении торнадо. Я хотел бы повторно использовать функцию, которая создает отчеты из отчета Json.

То есть в новом обработчике, который «регенерирует» существующий отчет, я хотел бы повторно использовать существующий обработчик, который знает, как создавать отчеты из Json.

server.py:

def create_server():
return tornado.web.Application([
    (r"/task", generator.GenHandler),
    (r"/task/(.+)", generator.GenHandler),

    url(r"/regenerate_task", generator.GenHandler, name="regenerate_task"),
    url(r"/regenerate_task/(.+)", generator.GenHandler, name="regenerate_task"),

    (r"/report_status/regenerate", report_status.Regenerate)

genHandler.class:

class GenHandler(tornado.web.RequestHandler):
    async def post(self):
        try:
            LOGGER.info(str(self.request.body))
            gen_args = self.parsed_body
           # create here report using the parsed body

и это тот обработчик, который я пытаюсь создать. Он возьмет сохраненный json из БД и создаст совершенно новый отчет с оригинальной логикой отчета.

class Regenerate(tornado.web.RequestHandler):
    async def post(self):
        rep_id = self.request.arguments.get('rep_id')[0].decode("utf-8") if self.request.arguments.get('rep_id') \
            else 0

        try:
            report = db_handler.get_report_by_id(rep_id)
            if *REPORT IS VALID*:
                return self.reverse_url("regenerate_task", report)
            else:
                report = dict(success=True, report_id=rep_id, report=[])

        except Exception as ex:
            report = dict(success=False, report_id=rep_id, report=[], error=str(ex))

        finally:
            self.write(report)

Прямо сейчас ничего не происходит. Я просто получаю JSON, который мне нужен, но нет записи для GenHandler и нет создаваемого отчета

1 Ответ

0 голосов
/ 31 августа 2018
  1. reverse_url возвращает URL для указанного псевдонима, но не вызывает его.
  2. У вас есть такая проблема, когда вам приходится вызывать другой обработчик, потому что у вас плохая организация кода. Хранение кода генерации отчета (т. Е. Бизнес-логики) в обработчике является плохой практикой, и вы должны переместить его в отдельный класс (который обычно называется контроллером в шаблоне MVC, а обработчик - это представление) или, по крайней мере, в отдельный метод, а затем повторно использовать это в вашем обработчике Renegate.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...