视图装饰器
正如名字所说,视图装饰器是用来装饰视图函数的一个装饰器,有些扩展也用到了这一知识,比如GitHub-Flask。
现在假设我们来写一个检测用户是否登录的装饰器,这个装饰器仅供学习和理解这个知识点,不能单独运行,需要用到可以自行定制:
# app.py
from functools import wraps
from flask import Flask, g
app = Flask(__name__)
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if g.user is None:
return redirect("/login")
return f(*args, **kwargs)
return decorated_function
@app.route("/")
@login_required
def main():
return "Hello " + g.user
if __name__ == "__main__":
app.run(port=5050, debug=True)
这里我们使用了标准库的functools的wraps函数来使用装饰器,使用g.user判断用户登录状态,加入没有登录,则返回登录界面。否则就执行函数。