【问题标题】:Interceptor or filter for rest endpoint休息端点的拦截器或过滤器
【发布时间】:2018-01-19 02:38:22
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    @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 方法。你可以使用装饰器。

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 2011-04-24
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多