Перехватчик или фильтр для конечной точки отдыха

Я только что закончил мой python flask 101 здесь. Все прошло хорошо, и теперь у меня успешно работает фляжный сервер.

Однако теперь я хочу добавить еще одну конечную точку отдыха /products, которая в этом случае должна возвращать примерный список продуктов. Поскольку это реализация на основе jwt, я хотел бы убедиться, что запрос пользователя перехватывается /status или /auth API до его выполнения.

Есть ли способ повторно использовать текущую реализацию, а не копировать все это снова для новых конечных точек отдыха?


person faizanjehangir    schedule 19.01.2018    source источник


Ответы (1)


Есть два способа сделать это.

Первый немного неявный. Можно указать методы, которые должны вызываться до и после запросов.

@app.before_request
def authenticate():
    # logic for verifying tokens
    pass

Функция аутентификации будет вызываться для каждого маршрута.

Документация

Документация

С другой стороны, вы можете создать декоратор вида:

from functools import wraps

def requires_auth(view):
    @wraps(view)
    def decorated(*args, **kwargs):
        # logic for verifying tokens

        return view(*args, **kwargs)

    return decorated

а затем вы можете обернуть любое представление, которое должно быть защищено этим декоратором, например

@requires_auth
@app.route('/myroute')
def my_route():
    # Normal logic for view
    pass

Это зависит от вашего варианта использования, если ваше приложение Flask представляет собой API, в котором большинство представлений защищены, вы можете использовать метод .before_request, с другой стороны, если у вас много общедоступных страниц. Можно использовать декоратор.

person danidee    schedule 19.01.2018