【问题标题】:Python equivalent of Ruby blocks for Sinatra-style URL routing用于 Sinatra 样式 URL 路由的 Python 等效 Ruby 块
【发布时间】:2011-07-02 15:39:24
【问题描述】:

有没有办法在 Python 中重新创建 Sinatra 的 URL 路由?是否有任何理由说明这可能是不可取的?

来自辛纳屈:

get '/' do
    'Hello world!'
end

来自 Flask(使用装饰器进行路由):

@app.route("/")
def hello():
    return "Hello World!"

Sinatra 通过 Ruby 块实现了这种简洁性:

def get(path, opts={}, &block)
    conditions = @conditions.dup
    route('GET', path, opts, &block)

    @conditions = conditions
    route('HEAD', path, opts, &block)
end

我认为 Python 没有完全等同于 Ruby 块的功能,但有一些方法可以重新创建功能。如何做到这一点?

【问题讨论】:

    标签: python ruby sinatra block flask


    【解决方案1】:

    正如你所说,Python 没有像 ruby​​ 块这样的东西。装饰器是路由常用的解决方案。另一种方法是创建一个包含路由的列表/字典,但是由于您似乎希望在底层代码旁边定义路由,因此您将要使用装饰器方式。

    【讨论】:

      【解决方案2】:

      另一种方法是使用元类,就像在 webpy 的 web.autoapplicationsource code for that 中所做的那样。

      【讨论】:

        【解决方案3】:

        那么,对于您的第二个问题“有什么理由说明这可能是不可取的吗?”。

        • 拥有命名函数使得url_for(some_function) 的操作成为可能,从而可以轻松地重构网站。
        • 命名函数允许测试、文档字符串等

        【讨论】:

          猜你喜欢
          • 2012-11-24
          • 1970-01-01
          • 1970-01-01
          • 2013-09-13
          • 2013-05-16
          • 1970-01-01
          • 2023-03-13
          • 2014-01-13
          • 1970-01-01
          相关资源
          最近更新 更多