Создать декоратор общедоступных URL-адресов Flask

Я хотел бы создать декоратор для маршрутов Flask , чтобы отмечать определенные маршруты как общедоступные, чтобы я мог делать что-то вроде этого:

@public
@app.route('/welcome')
def welcome():
    return render_template('/welcome.html')

В другом месте, вот что я думал, что декоратор и проверка будут выглядит так:

_public_urls = set()

def public(route_function):
    # add route_function's url to _public_urls
    # _public_urls.add(route_function ...?.url_rule)
    def decorator(f):
        return f

def requested_url_is_public():
    from flask import request
    return request.url_rule in _public_urls

Затем, когда делается запрос, у меня есть функция контекста, которая проверяет required_url_is_public .

Я немного озадачен, потому что не знаю, как получить правило url для данной функции в декораторе public .

Возможно, это не лучший выбор дизайна для Flask, но я ожидаю, что есть еще один простой и элегантный способ добиться этого.

Я видел подобные шаблоны раньше, и хотел бы имитировать их. Например, это что-то вроде декоратора Django login_required .

Я бы с удовольствием прочитал мысли по этому поводу.

8
задан Brian M. Hunt 19 November 2011 в 17:19
поделиться