kal*_*hua 3 python api rest flask
我仍然是Python和Flask中的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
Run Code Online (Sandbox Code Playgroud)
我想有一个更好的方法,但我不知道如何找到它.
如果您只想保护某些路线,可以使用视图装饰器.这看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
然后你像这样装饰每个资源:
@app.route('/resource_2', methods=['GET'])
@login_required
def get_resource_2():
Run Code Online (Sandbox Code Playgroud)
视图装饰器在此处记录:http: //flask.pocoo.org/docs/0.10/patterns/viewdecorators/
如果您想绝对保护每个请求,那么您可以在应用程序或蓝图级别使用before_request处理程序:
@app.before_request
def before_request():
if not ACCESS_TOKEN:
return redirect(url_for('login'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |