【Flask开发实战】flask装饰器介绍

一、前言

前面我们已经完成了登录页面的创建,在后续页面的创建中,需要解决一个问题,就是用户是否已认证登录,对于已经认证登录后我们可以开放其他页面访问的权限,如果是没有验证登录的,则应该拒绝访问。此时我们可以使用装饰器的作用,帮助完成不同页面访问用户的认证鉴定。

二、什么是装饰器

Flask 装饰器是一种特殊的 Python 语法,用于修改或包装函数或方法的行为。通过装饰器,我们可以在函数执行之前或之后添加额外的功能,例如身份验证、日志记录、缓存等。Flask 中的装饰器是非常强大的工具,可以提高代码的可读性、可维护性,能够轻松地使应用程序具有更高的灵活性和扩展性。

在 Flask 中,装饰器是以 @ 符号开始的函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会包装原始函数,并在执行前后执行一些额外的操作。

三、常用装饰器介绍

1、路由装饰器
在 Flask 中,最常见的装饰器是用于定义路由的 @app.route() 装饰器。它告诉 Flask 应用程序哪个 URL 触发了特定的函数。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

2、身份验证装饰器
通过自定义装饰器,我们可以轻松地实现身份验证功能,例如检查用户是否已登录,例如

from flask import Flask, request, redirect, url_for

app = Flask(__name__)

def login_required(func):
    def wrapper(*args, **kwargs):
        if not is_logged_in():
            return redirect(url_for('login'))
        return func(*args, **kwargs)
    return wrapper

@app.route('/')
@login_required
def home():
    return 'Welcome to the home page!'

if __name__ == '__main__':
    app.run(debug=True)

3、缓存装饰器
使用装饰器可以轻松地实现缓存功能,提高应用程序的性能,例如:

from flask import Flask, request
from functools import wraps

app = Flask(__name__)

def cache(func):
    cached_data = {}

    @wraps(func)
    def wrapper(*args, **kwargs):
        key = request.path
        if key in cached_data:
            return cached_data[key]
        result = func(*args, **kwargs)
        cached_data[key] = result
        return result

    return wrapper

@app.route('/')
@cache
def expensive_operation():
    # Some expensive operation
    return 'Result of expensive operation'

if __name__ == '__main__':
    app.run(debug=True)

四、项目开发实例 

在我们防火墙查询页面中,我们也需要使用到身份验证的装饰器,我们首先在主目录下定义个装饰器脚本decorators.py

from functools import wraps
from flask import g, redirect, url_fordef 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:

@bp.route("/")
@login_required
def index():
    u = FwModel.query.all()
    return render_template('index.html',u=u)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

基于AT89C51单片机的温度上下限自动控制检报警设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89247694?spm=1001.2014.3001.5501 C 源码+仿真图+毕业设计+实物制作步骤+06 题 目 基于单片机的温度检测调节系统设计 姓 名 学 号 专业班级 指导教师 年 月 日 任务书 …

在Mac OS系统下查看CPU型号以及核心数量

1. 基础信息 一般点开mac的关于本机,显示的是下面的信息: 2. 当前电脑的处理器型号 找到并打开终端输入下面命令: sysctl machdep.cpu.brand_string结果如下图: 3. 当前处理器物理核心数量 找到并打开终端输入下面命令&am…

有没有适合制造企业用的研发项目管理软件?制造业选型案例必看!“追觅”上线奥博思项目管理软件,加速项目交付

智能清洁家电赛道的领军者:追觅科技(苏州)有限公司(以下简称“追觅”)成功上线奥博思 PowerProject 数字化项目管理系统。通过 PowerProject 系统,追觅公司能够实现项目全流程的覆盖,从预研阶段…

【电源专题】拿人体的循环系统与板级电源做个比较

一般人可能会觉得电源大概是电子设备里面比较容易搞定的门类。因为,只要线路没有接错,指示灯(如果有)能亮,电源都能工作。从这个方面说,好像是很容易。但是通过多年的经验和经历的坑,发现电源其实是一个很麻烦的东西,稍微有一点不完美就会有大问题出现。 如果将人体也当…

北斗、网络时钟服务器(NTP授时服务器)几种设置方法

北斗、网络时钟服务器(NTP授时服务器)几种设置方法 计算机网络必须设立属于主机的NTP服务器,向网内用户提供网络校时服务,使得各种网络设备、服务器、个人计算机等可以通过NTP服务器校正它们自己的时间,用户可使用任何…

ue引擎游戏开发笔记(30)——对角色移动进行优化:实现人物转向

1.需求分析: 当前我们只实现了通过控制器可使角色进行前后左右的移动,但角色移动时与动画不匹配,并不会进行转向,实现角色随移动转向。 2.操作实现: 1思路:利用反转换函数inverse transform direction获取…

【PyTorch】7-生态简介

PyTorch:7-生态简介 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 7.1:torchvision 7.1.1:简介 The torchvision package consists of popula…

【busybox记录】【shell指令】md5sum

目录 内容来源: 【GUN】【md5sum】指令介绍 【busybox】【md5sum】指令介绍 【linux】【md5sum】指令介绍 使用示例: 128位MD5 - 默认输出 128位MD5 - 将每个文件当做二进制处理 128位MD5 - 从文件中读取MD5值并做检查 128位MD5 - 创建一个BSD风…

李廉洋:5.5-5.6现货黄金,WTI原油必看分析及策略。

美联储2024年5月议息会议将联邦基金利率的目标区间维持在5.25%-5.5%。本次会议声明发生较大变化,宣布6月开始放缓缩表。鲍威尔讲话总体中性偏鸽,指出美联储的下一步行动不太可能是加息。中信证券认为在美国失业率升至4%以上之前,美联储政策重…

美易官方:致敬芒格令人泪目

在今年的巴菲特股东大会上,许多投资者和媒体都期待着能从这位传奇投资家那里听到一些新的投资理念或策略。然而,大会上的一个感人瞬间,却让人们更加关注到了巴菲特身边的那位智者——查理芒格。 今年的股东大会从始至终贯穿着对芒格的致敬与…

【iOS】KVC

文章目录 前言一、KVC常用方法二、key与keypath区别key用法keypath用法 三、批量存值操作四、字典与模型相互转化五、KVC底层原理KVC设值底层原理KVC取值底层原理 前言 KVC的全称是Key-Value Coding,翻译成中文叫做键值编码 KVC提供了一种间接访问属性方法或成员变…

[粉丝问题] 主键使用自增ID还是UUID?

推荐使用自增ID,不要使用UUID。 因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID,那么只需要不断向…

JavaScript中的DOM和BOM

个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 💯Web API🍀1 API的概念🍀2 Web API的概念…

【C++ | 关键字】C++ 关键字介绍

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-04 0…

手摸手,带你用vue撸后台

前言 说好的教程终于来了,第一篇文章主要来说一说在开始写实际业务代码之前的一些准备工作吧,但这里不会教你 webpack 的基础配置,热更新原理是什么,webpack速度优化等等,有需求的请自行 google,相关文章已…

【JDBC】Apache DbUtils工具类使用

1 简介 Commons DbUtils是Apache 组织提供的一个对]DBC进行简单封装的开源工具类库,简化JDBC应用程序的开发,同时也不会影响程序的性能,是一个小巧简单实用的工具。对于数据表的读操作,可以把结果转换成List、Array、Set等java集…

【C++】详解STL的容器之一:list

目录 简介 初识list 模型 list容器的优缺点 list的迭代器 常用接口介绍 获取迭代器 begin end empty size front back insert push_front pop_front push_back pop_back clear 源代码思路 节点设计 迭代器的设计 list的设计 begin() end() 空构造 ins…

代码随想录35期Day30-Java

Day30题目 写在前面 五一收假&#xff0c;并且这三道题都是选做&#xff0c;明天看一下吧。 LeetCode332.重新安排行程 &#xff1a;todo LeetCode51. N皇后 class Solution {List<String> path new ArrayList<>();List<List<String>> res new …

使用360绿色清理工具释放磁盘空间

缘起&#xff1a; 配置差的电脑&#xff0c;在尝试安装360安全卫士时&#xff0c;它变得非常卡顿&#xff0c;无法正常使用。我安装360的初衷其实是想定期清理C盘的空间&#xff0c;以优化电脑的性能。 经过一番探索&#xff0c;发现了一个方法&#xff0c;可以单独提取出360…