2

有没有办法在 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 块的功能,但有一些方法可以重新创建功能。如何做到这一点?

4

3 回答 3

3

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

于 2011-02-23T10:27:21.777 回答
0

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

  • 有了命名函数就可以做一些事情url_for(some_function),这使得网站的重组变得很容易。
  • 命名函数允许测试、文档字符串等。
于 2011-05-18T16:30:13.857 回答
0

另一种方法是使用元类,就像在 webpy 的web.autoapplication中所做的那样,它的源代码

于 2011-02-23T13:13:43.647 回答