Python 如何要求对/admin路径下的任何内容进行身份验证?

Python 如何要求对/admin路径下的任何内容进行身份验证?,python,flask-sqlalchemy,flask,Python,Flask Sqlalchemy,Flask,我正在使用Flask,我想保护/admin路径下的所有内容 我该怎么做?我确信有比在每个函数中检查会话更好的方法。显而易见的方法是编写一个decorator来测试会话,并在验证失败时重定向到另一个页面。我不知道你知道多少python,但decorator是一个函数,它接受一个函数并返回另一个函数。基本上,它是一个函数修饰符。这里有一个decorator,它应该告诉您如何编写自己的来检查会话: import functools def check_session(view): @func

我正在使用Flask,我想保护/admin路径下的所有内容


我该怎么做?我确信有比在每个函数中检查会话更好的方法。

显而易见的方法是编写一个decorator来测试会话,并在验证失败时重定向到另一个页面。我不知道你知道多少python,但decorator是一个函数,它接受一个函数并返回另一个函数。基本上,它是一个函数修饰符。这里有一个decorator,它应该告诉您如何编写自己的来检查会话:

import functools

def check_session(view):
    @functools.wraps(view)
    def inner(*args, **kwargs):
        if <test for auth>:
            return view(*args, **kwargs)
        else:
            return flask.redirect("/")
    return inner

任何未通过身份验证检查的用户现在都将被重定向到别处,这样做的用户将能够像往常一样看到视图。Decorators是按从下到上的顺序应用的,因此请确保将它放在进行函数注册的任何其他decorator之后(即,
@app.route
)。

我认为,最简单的方法是使用类似于所描述的蓝图。然后,当URL以
/admin
开头时,您可以在每个请求之前运行一些代码,在这些代码中您可以进行身份验证。

我是Python初学者。我理解使用您的方法,我必须在/admin下的每个函数定义中放置@check\u session decorator,并且不可能只将其放置在一个位置。这是正确的吗?虽然可能有其他解决方案涉及更少的键入,但它们很可能更黑客,更难维护。decorator的优点是它们非常明确,并且与源代码中的函数声明位于同一位置。
@app.route("/admin")
@check_session
def admin_view():
    return "Top secret"