如何确保flask应用程序已在所有路线上获得授权?

2024-05-17 02:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍然是Python和烧瓶里的n00b。我正在使用flask为API创建路由。我正在使用GitHub Flask与GitHub API集成。在为每个路由执行代码之前,是否有一种简单一致的方法来检查当前的访问/请求令牌?除了复制/粘贴同一张支票到处都是,希望如此;这是我目前正在做的。在

@app.route('/resource_1', methods=['GET'])
def get_resource_1():
  if not ACCESS_TOKEN:
    return redirect(url_for('login'))

  # ... do stuff for route

@app.route('/resource_2', methods=['GET'])
def get_resource_2():
  if not ACCESS_TOKEN:
    return redirect(url_for('login'))

  # ... do other stuff for this route

我不知道怎么才能找到更好的方法。在


Tags: 方法githubapiapp路由forgetif
1条回答
网友
1楼 · 发布于 2024-05-17 02:36:07

如果你想保护某个路线,或者只想保护某个景观。这看起来像这样:

  from functools import wraps
  from flask import g, request, redirect, url_for

    def login_required(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            if not ACCESS_TOKEN:
                return redirect(url_for('login'))
            return f(*args, **kwargs)
        return decorated_function

然后对每个资源进行如下装饰:

^{pr2}$

视图装饰器记录在这里: http://flask.pocoo.org/docs/0.10/patterns/viewdecorators/

如果您想绝对保护每个请求,那么您可以在应用程序或蓝图级别上使用before\u请求处理程序:

@app.before_request
def before_request():
    if not ACCESS_TOKEN:
        return redirect(url_for('login'))

相关问题 更多 >