尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Python项目实战】用户系统:注册登录与密码哈希
现在你的博客有个大漏洞:任何人都能发文章、删文章。今天装上门禁——注册、登录、登出,顺便回答【Python项目实战】项目·强密码生成器:随机、安全与剪贴板这篇文章里埋的那个问题:为什么密码必须“哈希加盐”存储。🎯本篇成品:博客v3——注册、登录、登出、flash提示、登录门禁(没登录不能写/删)。零新增依赖:密码哈希用的werkzeug随Flask自带。含注释约130行。📌 太长不看版(给想快速上手的你)项目信息一句话说明项目名称Flask博客(v3·用户系统版)代码行数~130行(含注释) + 模板文件依赖零新增!werkzeug随Flask自带核心功能注册 + 登录 + 登出 + 登录门禁 + flash提示跑起来的命令python main.py→ 浏览器打开http://127.0.0.1:5000核心知识点密码哈希加盐、session会话、自定义装饰器做完你能得到一个有门禁的博客,从“玩具”变“产品”!一、密码为什么不能明文存(第9篇伏笔兑现)假设数据库泄露了(忘改debug、弱密码后台、云盘误分享……),两种结局:存储方式攻击者看到的后果❌明文存密码打开表,所有账号当场沦陷大多数人到处复用密码,沦陷会蔓延到邮箱、支付账号✅哈希存一串$scrypt$32768$8$1$...的天书没有密码原文,登录不了🔪 哈希函数是单向的碎纸机📌把密码绞成指纹容易,从指纹还原密码(目前)不可能。登录时做的不是“解密密码”,而是把你输入的密码重新绞一遍,比对两坨指纹是否一致。🧂 “加盐”是什么?问题加盐的解法如果两个用户密码相同,哈希值也相同盐 = 给每个密码撒一把随机字符再哈希攻击者提前算好“常见密码→哈希”对照表(彩虹表),按表查就破解了让相同的密码生出不同的哈希,彩虹表直接作废🧪 亲手验证💡secrets是“必须不可预测”,werkzeug的盐是“故意每次不同”——方向相反的一对。fromwerkzeug.securityimportgenerate_password_hashgenerate_password_hash("python666")'scrypt:32768:8:1$saltA$...'generate_password_hash("python666")'scrypt:32768:8:1$saltB$...'# 同一个密码,两个完全不同的哈希✅好消息:这两个函数在werkzeug.security里,Flask自带werkzeug——本篇零新增依赖。二、第二个概念:session——HTTP的“记忆手环”HTTP是无状态的:每个请求都是陌生人,上一秒登录、下一秒服务器就把你忘了。session就是解决方案:登录成功后服务器发你一个“签名手环”(Cookie),之后每个请求亮手环,Flask验签后知道“你是谁”。概念比喻说明session["uid"] = 用户id手环内容由Flask用SECRET_KEY签名,篡改内容签名就对不上,手环自动作废SECRET_KEY手环的防伪印刷术泄露它,任何人都能伪造登录三、第0步:setup1. 复制flask_blog_v2为flask_blog_v3(保留v2) 2. 激活venv 3. 无需安装任何新包(werkzeug随Flask自带) 4. git commit一次干净的起点四、第1步:SECRET_KEY——手环的防伪印刷术importos app=Flask(__name__)app.config["SQLALCHEMY_DATABASE_URI"]="sqlite:///blog.db"app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=False# 生产环境:从环境变量读(第5篇军规——密钥不进仓库)app.config["SECRET_KEY"]=os.environ.get("BLOG_SECRET_KEY","dev-only-do-not-use-in-prod")⚠️ 两个注意点#注意点说明①没有SECRET_KEY就用sessionFlask会当场报错(第十节①)②SECRET_KEY必须固定每次启动随机生成的话,重启一次全体用户被“踢下线”(第十节③)五、第2步:User模型——存指纹,不存密码fromwerkzeug.securityimportgenerate_password_hash,check_password_hashclassUser(db.Model):__tablename__="users"id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(40),unique=True,nullable=False)password_hash=db.Column
RELATED

相关推荐

Axios封装实战:从拦截器到TypeScript,打造统一请求架构

Axios封装实战:从拦截器到TypeScript,打造统一请求架构

开门见山,这个话题我太有发言权了。刚工作那两年,我的 Axios 用法就是“哪页用哪页调”,登录接口一个写法、列表接口一个写法,后端改个字段类型我得全局搜半天。直到有次 code review 被组长指着鼻子问“你这错误提示为什么有的弹…

📅 2026/9/14 22:13:39
MATLAB在家庭能量管理系统中的优化应用

MATLAB在家庭能量管理系统中的优化应用

1. 分时电价与家庭能量管理的基本概念分时电价(Time-of-Use Pricing)是电力公司为平衡电网负荷而设计的一种差异化定价机制。它将一天划分为多个时段(通常包括峰时、平时和谷时),每个时段对应不同的电价水平。这种定价…

📅 2026/9/14 22:13:39
Allure2 报告集成 Pytest 特性(xfail、skipif、fixture)

Allure2 报告集成 Pytest 特性(xfail、skipif、fixture)

一. Allure2 报告集成 Pytest 特性(xfail、skipif、fixture)Allure2 测试报告可以集成 Pytest 框架中的三大核心特性(xfail、skipif、fixture),集成后的测试结果会展示特定的标识在用例详情页面,帮助测试人…

📅 2026/9/14 22:13:39
MORE NEWS

更多资讯

📰

iloader:前端资源加载统一管理,图片懒加载与并发控制实战

搞前端时间久了,你会发现很多项目到最后根本不是败在业务逻辑上,而是栽在“资源加载”这一点上。尤其是图片多、脚本杂、登录态要校验、加载顺序还敏感的页面,随便一个加载策略没想清楚,首屏白屏、图片闪跳、滚动卡顿全来了。我整…

📰

LlamaIndex数据编排框架与RAG技术实践指南

1. LlamaIndex核心概念解析LlamaIndex是一个开源的数据编排框架,专门用于构建基于大语言模型(LLM)的应用程序。它通过检索增强生成(RAG)技术,将外部数据源与LLM的能力相结合,显著提升了模型在特定领域的表现。1.1 数据编排框架的本质数据编排…

📰

2026年抖音代运营市场趋势与核心能力解析

1. 2026年抖音代运营市场现状解析2026年初的抖音生态已经发生了显著变化。平台算法经过多次迭代,内容推荐机制更加精细化,对代运营团队的专业能力提出了更高要求。根据我最近三个月对接17家代运营服务商的实测数据,行业平均账号成长周期从202…

📰

在 A2UI 中安全集成 MCP App:基于 mcp-apps-in-a2ui-sample 的双 iframe 沙箱实战解析

在 A2UI 中安全集成 MCP App:基于 mcp-apps-in-a2ui-sample 的双 iframe 沙箱实战解析 【免费下载链接】a2ui 项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui 本文基于 a2ui 仓库中的 mcp-apps-in-a2ui-sample 示例,完整讲解如何把第三…

📰

Paramics交通仿真结果分析:从数据指标到工程决策的完整指南

做交通仿真最容易被忽略的一个环节,其实是最后的结果分析。模型标定得再仔细、路网搭建得再精细,仿真跑完不把数据看透,前面所有功夫都白费。我在用Paramics做交通仿真项目时,对这一点的体会特别深:很多新手盯着3D动画…

📰

Kuikly跨端实践:把DeepSeek Harness装进口袋

先交代一下背景。DeepSeek Harness 这个名字,最近在群里和社区里频繁出现,很多人搜的是“怎么安装”“怎么下载”“有没有插件”,但深入用一圈之后会发现,它本质上做的是同一件事:把 DeepSeek 这套模型能力的管理、调度…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬