Python 如何将身份验证提取到单独的函数?
我正在尝试实现一个简单的基于会话的身份验证检查,如下所示:Python 如何将身份验证提取到单独的函数?,python,authentication,flask,Python,Authentication,Flask,我正在尝试实现一个简单的基于会话的身份验证检查,如下所示: @app.route("/home") def home(): if session.get('userID') is None: return redirect(url_for('login')) return render_template('home.html', uname = session['user'], userID = session['userID']) 这是可行的,但我想将检查
@app.route("/home")
def home():
if session.get('userID') is None:
return redirect(url_for('login'))
return render_template('home.html', uname = session['user'], userID = session['userID'])
这是可行的,但我想将检查提取到它自己的函数中,并在多路径中调用它,试图保持代码干燥。当我替换
if session.get('userID') is None:
return redirect(url_for('login'))
使用auth\u check()
并将签入移动到
def auth_check()
if session.get('userID') is None:
return redirect(url_for('login'))
留给我
@app.route("/home")
def home():
auth_check()
return render_template('home.html', uname = session['user'], userID = session['userID'])
当我在没有会话的情况下加载页面时,我在会话名称上得到了一个关键错误,我希望它像内联代码一样重定向。与Flask处理路线的方式有关?这不是一笔大交易,但似乎是一个很好的答案,可供将来参考。不幸的是,flask会话仅在请求范围内工作。所以您不能超出请求处理功能。但是您可以制作一个简单的装饰器来验证请求 此装饰器的示例已在stackoverflow上:您可以定义一个闭包(装饰器)