【问题标题】:tornado reverse url with post request带有发布请求的龙卷风反向 url
【发布时间】:2018-08-30 13:16:56
【问题描述】:

我在龙卷风应用程序中有一个报告服务。 我想重用从报表 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 条目,也没有重新生成报告

【问题讨论】:

    标签: python python-3.x asynchronous tornado


    【解决方案1】:
    1. reverse_url 返回指定别名的 url,但不调用它。
    2. 您有这样的问题,您必须调用另一个处理程序,因为您的代码组织很差。在处理程序中存储报告生成代码(即业务逻辑)是一种不好的做法,您应该将其移动到单独的类(在 MVC 模式中通常称为控制器,处理程序是视图)或至少单独的方法,然后重用它在你的 Renegate 处理程序中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多