Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Sinatra风格URL路由的Ruby块的Python等价物_Python_Ruby_Sinatra_Block_Flask - Fatal编程技术网

用于Sinatra风格URL路由的Ruby块的Python等价物

用于Sinatra风格URL路由的Ruby块的Python等价物,python,ruby,sinatra,block,flask,Python,Ruby,Sinatra,Block,Flask,有没有办法用Python重新创建Sinatra的URL路由?有什么理由不希望这样做 来自西纳特拉: get '/' do 'Hello world!' end 从烧瓶(使用装饰器进行布线): Sinatra通过Ruby块实现了这种简洁性: def get(path, opts={}, &block) conditions = @conditions.dup route('GET', path, opts, &block) @conditions

有没有办法用Python重新创建Sinatra的URL路由?有什么理由不希望这样做

来自西纳特拉:

get '/' do
    'Hello world!'
end
从烧瓶(使用装饰器进行布线):

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块之类的东西。装饰器是路由的常用解决方案。另一种方法是创建一个包含路由的列表/目录,但由于您似乎希望路由定义位于底层代码的旁边,所以装饰器方法就是您想要使用的方法。

另一种方法是使用元类,就像webpy中所做的那样。

所以,关于你的第二个问题“有什么理由不希望这样做吗?”

  • 有了命名函数,就可以为(某些函数)执行
    url\u操作,从而可以轻松地重新构建站点
  • 命名函数允许测试、文档字符串等
def get(path, opts={}, &block)
    conditions = @conditions.dup
    route('GET', path, opts, &block)

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