我正在使用Flask,我想保护/ admin路径下的所有内容。
我该怎么做?我确信有比在每个函数中检查会话更好的方法。
答案 0 :(得分:3)
显而易见的方法是编写一个测试会话的装饰器,如果验证失败,则重定向到另一个页面。我不知道你知道多少python,但装饰器是一个函数,它接受一个函数并返回另一个函数。基本上,它是一个功能修饰符。这是一个装饰者,应该告诉你编写自己的方法来检查会话:
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
正如您所看到的,我们有一个函数接受视图函数,然后定义一个名为inner的新函数来检查身份验证,如果成功,则调用原始视图。行@functools.wraps(view)
是使用装饰器的示例; functools.wraps
装饰器给它的函数包装了它作为第一个参数给出的函数的属性。要使用此装饰器,请将其应用于您的视图:
@app.route("/admin")
@check_session
def admin_view():
return "Top secret"
任何未通过身份验证检查的用户现在都将被重定向,并且执行此操作的用户将能够照常查看该视图。装饰器以从下到上的顺序应用,因此请确保将其放在执行功能注册的任何其他装饰器之后(即@app.route
)。
答案 1 :(得分:3)
我认为,最简单的方法是使用类似于描述方式的蓝图in this snippet。然后,当URL以/admin
开头时,您可以在每个请求之前运行一些代码,并且在该代码中您可以进行身份验证。