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上:

您可以定义一个闭包(装饰器)