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

Interceptor or filter for rest endpoint

我刚刚完成我的 python 烧瓶 101 tutorial here。一切顺利,现在我成功地拥有了 Flask 服务器 运行。

但是,现在我想添加另一个休息端点 /products,在这种情况下应该 return 产品示例列表。由于它是基于 jwt 的实现,我想确保用户请求在执行之前被 /status/auth api 拦截。

有没有办法重用当前的实现而不是为新的休息端点再次复制粘贴整个东西?

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

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

@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

然后你可以包装任何应该用这个装饰器保护的视图,例如

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

这取决于您的用例,如果您的 Flask 应用是 API,其中大多数视图都受到保护,另一方面,如果您有很多视图,则可以使用 .before_request 方法public 个页面。你可以使用装饰器。