Python-эквивалент блоков Ruby для маршрутизации URL в стиле Синатры - PullRequest
2 голосов
/ 23 февраля 2011

Есть ли способ воссоздать URL-маршрутизацию Синатры в Python? И есть ли причины, по которым это может быть нежелательно?

Из Синатры:

get '/' do
    'Hello world!'
end

Из Flask (с использованием декораторов для маршрутизации):

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

Синатра достигает этой краткости через блоки Ruby:

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

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

Я понял, что в Python нет точного эквивалента блоков Ruby, но есть способы воссоздания функциональности. Как это можно сделать?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2011

Как вы сказали, в Python нет ничего похожего на рубиновые блоки.Декораторы являются наиболее часто используемым решением для маршрутизации.Другим способом было бы создание списка / dict, содержащего маршруты, но так как вы, кажется, хотите, чтобы определения маршрутов находились рядом с базовым кодом, вам следует использовать способ декоратора.

0 голосов
/ 18 мая 2011

Итак, на ваш второй вопрос: «И есть ли причины, по которым это может быть нежелательно?».

  • Именованные функции позволяют делать вещи url_for(some_function), что облегчает реструктуризацию сайта.
  • именованные функции позволяют проводить тестирование, строки документации и т. Д.
0 голосов
/ 23 февраля 2011

Другим способом было бы использование метаклассов, как это делается в web.autoapplication , исходного кода webpy для этого .

...