一、前言
前面我们已经完成了登录页面的创建,在后续页面的创建中,需要解决一个问题,就是用户是否已认证登录,对于已经认证登录后我们可以开放其他页面访问的权限,如果是没有验证登录的,则应该拒绝访问。此时我们可以使用装饰器的作用,帮助完成不同页面访问用户的认证鉴定。
二、什么是装饰器
Flask 装饰器是一种特殊的 Python 语法,用于修改或包装函数或方法的行为。通过装饰器,我们可以在函数执行之前或之后添加额外的功能,例如身份验证、日志记录、缓存等。Flask 中的装饰器是非常强大的工具,可以提高代码的可读性、可维护性,能够轻松地使应用程序具有更高的灵活性和扩展性。
在 Flask 中,装饰器是以 @ 符号开始的函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会包装原始函数,并在执行前后执行一些额外的操作。
三、常用装饰器介绍
1、路由装饰器
在 Flask 中,最常见的装饰器是用于定义路由的 @app.route() 装饰器。它告诉 Flask 应用程序哪个 URL 触发了特定的函数。
2、身份验证装饰器
通过自定义装饰器,我们可以轻松地实现身份验证功能,例如检查用户是否已登录,例如
3、缓存装饰器
使用装饰器可以轻松地实现缓存功能,提高应用程序的性能,例如:
四、项目开发实例
在我们防火墙查询页面中,我们也需要使用到身份验证的装饰器,我们首先在主目录下定义个装饰器脚本decorators.py
from functools import wraps
from flask import g, redirect, url_for
def login_required(func):
# 保留func的信息
@wraps(func)
# func(a,b,c)
# func(1,2,c=3)
def inner(*args, **kwargs):
if g.user:
return func(*args, **kwargs)
else:
return redirect(url_for("auth.login"))
return inner
在之后的蓝图编写时,对应不同的url,我们就可以加上@login_required后,实现身份验证的功能,例如马上我们要做的首页url: