【问题标题】:Several request handlers for a single url单个 url 的多个请求处理程序
【发布时间】:2014-07-16 21:00:17
【问题描述】:

将请求处理程序链接到 URL 的典型方法如下所示:

application = webapp2.WSGIApplication([('/', RequestHandler1)]

如果我想将多个请求处理程序链接到一个 URL。这可能吗?我在想这样的事情:

application = webapp2.WSGIApplication([('/', (RequestHandler1, RequestHandler2)]

【问题讨论】:

  • 你想要这个做什么?有什么意义?
  • 在单个 URL 上,我希望有两个 post 方法将数据保存到两个单独的数据存储模型中。
  • 为什么需要两个处理程序呢?为什么不使用一种方法呢?
  • 我认为根据业务逻辑将这两个操作分开更有意义(因为使代码更加模块化)。例如,这对我来说更有意义:RequestHandler1.post(business logic 1), RequestHandler2.post(business logic 2) 而不是 requestHandler.post(if x: business logic 1 else business logic 2)
  • 哪个请求处理程序应该返回响应?如果他们都回应会发生什么?

标签: python google-app-engine python-2.7 webapp2


【解决方案1】:

您可以进行正则表达式匹配以匹配 url 参数

例如:

application = webapp2.WSGIApplication([
    ('/([a-z]+)', RequestHandler1), # matched the word parameter
    ('/([0-9]+)', RequestHandler2) # matched the numeric parameter
]

所以,你可以根据参数条件分离业务逻辑...

替代方案,你为什么不设置get参数?

/application?paramcondition="A" --> URL
/application?paramcondition="0" --> URL

class blabla(webapp2.RequestHandler):
   def get(self):
      param = self.request.get("paramcondition")

      if param == "A":
         # do something
      elif param == "0":
         # do another

所以您只需要 1 个 URL 处理程序...

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2020-10-10
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多