当前位置: 首页 > news >正文

【flask+python】利用魔术方法,更优雅的封装model类

定义model

# @Time      :2024-2024/2/27-14:49
# @Email     :514422868@qq.com
# @Author    :Justin
# @file      :user.py
# @Software  :01-fishbook
from app.model.base import Base
from sqlalchemy import Column, Integer, SmallInteger, String
from werkzeug.security import generate_password_hash, check_password_hashclass User(Base):# auto_increment=True 不需要auto_incrementid = Column(Integer, primary_key=True)nickname = Column(String(32), index=True, nullable=False, unique=True)email = Column(String(32), index=True, nullable=False, unique=True)status = Column(SmallInteger, default=1)_password = Column("password", String(256))@propertydef password(self):return self._password# 这里必须是属性名称@password.setterdef password(self, raw):self._password = generate_password_hash(raw)def check_password(self, raw: str):# 必须是先是加密之后的密码,再是原始密码return check_password_hash(self.password, raw)

里面的注释要好好看,
注意@property是 obj.password时触发,因为password是密文存储的,
所以,在赋值时指向password(self,raw)的方法,将它加密
使用的generate_password_hash 和 check_password_hash 都是werkzeug.security下的方法。

因为两个魔力函数的存在,使得,
涉及密码时不可以传统的方式验证用户是否存在:

def find_user():with app.app_context():# 上面一种查询方式错误,因为对password的属性进行了getter和setter的装饰器修饰# User.query.filter_by(email=email, password=password).first()# 正确的方式应用这样# user = User.query.filter_by(_password="123456").first()# 业务上的使用方式是这样:param = {"email": "a@qq.com","password": "123456"}user = User.query.filter_by(email=param["email"]).first()if user:print(user.check_password(param["password"]))print(user)a_en = generate_password_hash("a")print(check_password_hash(a_en, "a"))print(a_en)

filter的妙用

	@propertydef intro(self):self.intro = filter(lambda x: True if x else False, [self.author, self.publisher, self.price])

相关文章:

【flask+python】利用魔术方法,更优雅的封装model类

定义model # Time :2024-2024/2/27-14:49 # Email :514422868qq.com # Author :Justin # file :user.py # Software :01-fishbook from app.model.base import Base from sqlalchemy import Column, Integer, SmallInteger, String from werkzeug.security …...

Qt程序设计-报警灯自定义控件实例

本文讲解Qt报警灯自定义控件实例。 实现功能 设置边框和内部颜色。 设置是否闪烁点亮。 添加的报警灯类 #ifndef LIGHT_H #define LIGHT_H#include <QWidget> #include <QDebug> #include <QPainter> #include <QTimer>class Light : public QWid…...

Linux之定时任务02

一、什么是crond Linux 中 crond 就是定时任务&#xff0c;即根据 crond 指定的时间&#xff0c;由系统按指定的时间&#xff0c;周期性&#xff0c;自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务&#xff0c;如果有且符合触发条件&#xff0c;…...

PHP堆栈+errLog定位

调用堆栈&#xff08;Call Stack&#xff09;是一个记录了程序在运行时所有活动子例程的栈结构。它以函数调用的方式描述了程序的执行流程和调用关系。 在PHP中&#xff0c;我们可以通过打印PHP调用堆栈来辅助调试和定位代码中的问题。本文将介绍如何在PHP中打印调用堆栈&…...

【大数据】Flink SQL 语法篇(七):Lookup Join、Array Expansion、Table Function

《Flink SQL 语法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 语法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 语法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 语法篇&#xff08;三&…...

【云原生】Spring Cloud Gateway的底层原理与实践方法探究

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…...

springboot 实现本地文件存储

springboot 实现本地文件存储 实现过程 上传文件保存文件&#xff08;本地磁盘&#xff09;返回文件HTTP访问服务器路径给前端&#xff0c;进行效果展示 存储 服务端接收上传的目的是提供文件的访问服务&#xff0c;对于SpringBoot而言&#xff0c;其对静态资源访问提供了很…...

Python进阶学习:Pandas--查看DataFrame中每一列的数据类型

Python进阶学习&#xff1a;Pandas–查看DataFrame中每一列的数据类型 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…...

Groovy - 大数据共享搜索配置

数据共享搜索列中配置了搜索列&#xff0c;相应的数据共享接口中也需要支持根据配置的字段搜索&#xff0c;配置实体时&#xff0c;支持搜索的入参code必须是searchKeys&#xff0c;且接口应该是需要支持分页&#xff08;入参必须是 current、pageSize&#xff09;的。current …...

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 文章目录 系列文章目录前言一、Flask项目介绍…...

关于CSS 优先级布局应用的教程

在前端开发中&#xff0c;CSS 的优先级布局是非常重要的一部分。通过合理地应用 CSS 优先级&#xff0c;我们可以更加灵活地控制页面的布局和样式。本教程将向您介绍如何利用 CSS 优先级进行布局&#xff0c;并通过实例展示其应用。 1. 了解 CSS 优先级 在 CSS 样式表中&…...

vue2+elementui上传照片(el-upload 超简单)

文章目录 element上传附件&#xff08;el-upload 超详细&#xff09;代码展示html代码data中methods中接口写法 总结 element上传附件&#xff08;el-upload 超详细&#xff09; 这个功能其实比较常见的功能&#xff0c;后台管理系统基本上都有&#xff0c;这就离不开element的…...

目标检测新SOTA:YOLOv9问世,新架构让传统卷积重焕生机(附代码)

在目标检测领域,YOLOv9 实现了一代更比一代强,利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 YOLOv8 正式发布一年多以后,YOLOv9 终于来了! 我们知道,YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Al…...

Javascript:输入输出

目录 一.前言 二.正文 1.输出 2.输入 3.字面量 概念&#xff1a; 三.结语 一.前言 Javascript作为运行浏览器的语言&#xff0c;对于学习前端的同学来说十分重要&#xff0c;那么从现在开始我们将开始介绍有关 Javascript。 二.正文 1.输出 document.write() : 向body内…...

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…...

HarmonyOS 开发之———应用程序入口—UIAbility的使用

谢谢关注!! 前言:上一篇文章主要介绍ArkJS 基础—〉自定义组件使用。如需了解谢谢查阅:http://t.csdnimg.cn/01PQ2 一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 …...

推荐几款优秀免费开源的导航网站

&#x1f9a9;van-nav 项目地址&#xff1a;van-nav项目介绍&#xff1a;一个轻量导航站&#xff0c;汇总你的所有服务。项目亮点&#xff1a;全平台支持&#xff0c;单文件部署&#xff0c;有配套浏览器插件。效果预览 &#x1f9a9;发现导航 项目地址&#xff1a;nav项目…...

input输入框过滤非金额内容保留一个小数点和2位小数

这篇是输入框过滤非金额内容保留一个小数点和2位小数&#xff0c;金额的其他格式化可以看这篇文章常用的金额数字的格式化方法 js方法直接使用 该方式可以直接使用过滤内容&#xff0c;也可以到onInput或onblur等地方过滤&#xff0c;自行使用 /*** 非金额字符格式化处理* p…...

推荐系统经典模型YouTubeDNN代码

文章目录 前言数据预处理部分模型训练预测部分总结与问答 前言 上一篇讲到过YouTubeDNN论文部分内容&#xff0c;但是没有代码部分。最近网上教学视频里看到一段关于YouTubeDNN召回算法的代码&#xff0c;现在我分享一下给大家参考看一下&#xff0c;并附上一些我对代码的理解…...

学习加密(三)spring boot 使用RSA非对称加密,前后端传递参数加解密

1.前面一篇是AES对称加密写了一个demo,为了后面的两者结合使用,今天去了解学习了下RSA非对称加密. 2.这是百度百科对(对称加密丶非对称加密)的解释: (1)对称加密算法在加密和解密时使用的是同一个秘钥。 (2)非对称加密算法需要两个密钥来进行加密和解密&#xff0c;这两个秘钥…...

Python百度搜索API开源项目:无限制免费搜索引擎集成的终极解决方案

Python百度搜索API开源项目&#xff1a;无限制免费搜索引擎集成的终极解决方案 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装&#xff0c;pip安装&#xff0c;支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项…...

NSFW标签的演变:从论坛笑话到网络文化符号

1. NSFW标签的起源&#xff1a;一个论坛笑话的诞生 1998年的Snopes论坛上&#xff0c;一位英国女性用户抱怨某些帖子内容不适合学龄儿童观看&#xff0c;提议用"NFBSK"&#xff08;Not For British School Kids&#xff09;作为标记。这个略带戏谑的建议意外点燃了论…...

Prompt即API:将智能代码生成接入CI/CD流水线的4层抽象架构(含OpenAPI Schema定义与验证工具链)

第一章&#xff1a;Prompt即API&#xff1a;将智能代码生成接入CI/CD流水线的4层抽象架构&#xff08;含OpenAPI Schema定义与验证工具链&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 当提示词&#xff08;Prompt&#xff09;被赋予结构化契约、可验证输入输出…...

超详细!Hermes Agent 一键部署全流程指南,轻松上手不踩坑

继 OpenClaw&#xff08;养龙虾&#xff09;爆火之后&#xff0c;开源 Agent 领域又迎来一位顶流选手&#xff0c;由 Nous Research 打造的 Hermes Agent&#xff08;爱马仕&#xff09;。Hermes Agent 不同于普通的聊天机器人&#xff0c;它是一个拥有持久记忆、能够自主进化并…...

HideMockLocation终极指南:5步快速隐藏Android模拟位置设置

HideMockLocation终极指南&#xff1a;5步快速隐藏Android模拟位置设置 【免费下载链接】HideMockLocation Xposed module to hide the mock location setting. 项目地址: https://gitcode.com/gh_mirrors/hi/HideMockLocation HideMockLocation是一款专为Android开发者…...

从PWM到模拟信号:低通滤波器设计的工程实践与参数权衡

1. PWM DAC基础与低通滤波器的必要性 第一次接触PWM DAC这个概念时&#xff0c;我完全被它的巧妙设计震惊了。在嵌入式开发中&#xff0c;DAC&#xff08;数模转换器&#xff09;资源往往非常有限&#xff0c;而PWM&#xff08;脉宽调制&#xff09;却几乎每个MCU都自带多个通道…...

国民技术 N32G031K8L7 LQFP-32 单片机

内核CPU 32位ARM Cortex-M0 内核&#xff0c;单周期硬件乘法指令 最高主频48MHz 加密存储器 - 高达64KByte片内Flash&#xff0c;支持加密存储&#xff0c;支持硬件ECC校验&#xff0c;10万次擦写次数&#xff0c;10年数据保持 一8KByte片内SRAM&#xff0c;支持硬件奇偶校验 低…...

别再死记命令了!用eNSP华为模拟器搞定网络配置的5个高效技巧

别再死记命令了&#xff01;用eNSP华为模拟器搞定网络配置的5个高效技巧 第一次打开eNSP时&#xff0c;很多人会本能地打开记事本&#xff0c;准备记录那些冗长的命令行——就像背单词表一样。但三个月后&#xff0c;这些笔记往往变成了电脑里再也用不上的数字废纸。真正高效的…...

A2DP音频卡顿终极指南:从硬件射频测试到HCI日志分析的完整链路

A2DP音频卡顿终极指南&#xff1a;从硬件射频测试到HCI日志分析的完整链路 蓝牙音频传输中的卡顿问题一直是困扰开发者的技术难题。当用户沉浸在音乐中时&#xff0c;突如其来的杂音或断断续续的播放体验会严重影响产品口碑。本文将系统性地剖析A2DP音频卡顿问题的全链路分析方…...

小米澎湃OS日志抓取全攻略:从拨号盘暗码到问题反馈,手把手教你定位手机卡顿、Wi-Fi断流等疑难杂症

小米澎湃OS日志抓取实战指南&#xff1a;精准定位卡顿、断流问题的全流程解析 当你的小米手机突然卡成幻灯片&#xff0c;或是Wi-Fi信号像过山车一样时断时续&#xff0c;那种抓狂的感觉我太懂了。去年我帮朋友排查一部频繁死机的小米13时&#xff0c;发现系统日志就像手机的&q…...