休息端点的拦截器或过滤器

时间:2018-01-19 02:38:22

标签: python python-3.x flask flask-restful

我刚刚完成了我的python flask 101 tutorial here。一切顺利,现在我已经成功运行了烧瓶服务器。

但是,现在我想添加另一个休息端点/products,它应返回此例中的产品样本列表。由于它是基于jwt的实现,因此我想确保用户请求在执行前由/status/auth api拦截。

有没有办法重用当前的实现,而不是为新的休息端点复制粘贴整个事情?

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。

第一个有点隐含。可以指定应在请求之前和之后调用的方法。

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

将为每条路线调用身份验证功能。

Documentation

文档

另一方面,您可以创建一个视图装饰器:

from functools import wraps

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

        return view(*args, **kwargs)

    return decorated

然后你可以包装任何应该用这个装饰器保护的视图E.g

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

这取决于您的使用案例,如果您的Flask应用是一个大多数视图受到保护的API,那么如果您有大量公开的页面,则可以使用.before_request方法。你可以使用装饰器。