flask 模拟简单的登录功能(2)

通过设置 app.secret_key 进行用户登录验证

通过使用app.secret_key,可以对会话数据进行加密和解密,以确保会话数据的安全性。会话数据包括用户的登录状态、表单数据等敏感信息,通过设置 app.secret_key,可以防止会话被恶意篡改或窃取。
app.py代码如下:

from flask import Flask, request, session, redirect, url_for,render_templateapp = Flask(__name__)
app.secret_key = 'your_secret_key'# 模拟用户数据库
users = {'admin': 'admin'
}# 根路径
@app.route('/')
def index():if 'logged_in' in session and session['logged_in']:return redirect(url_for('page'))else:return render_template('login2.html')@app.route('/login', methods=['POST','GET'])
def login():print(request.method)if request.method == 'POST':print('post')username = request.form['username']password = request.form['password']if users.get(username) == password:session['logged_in'] = Truereturn redirect(url_for('success'))else:return redirect(url_for('failed'))else:print('get')if 'logged_in' in session and session['logged_in']:return redirect(url_for('success'))return redirect(url_for('goto'))# 登录成功
@app.route('/success')
def success():return f'login successfully!<a href = "/logout">退出登录</a>'# 登录失败
@app.route('/failed')
def failed():return f'login failed!<a href = "/">重新登录</a>'# 登录失败
@app.route('/goto')
def goto():return f'Please login first!<a href = "/">去登录</a>'# 退出登录
@app.route('/logout')
def logout():session.pop('logged_in', None)return 'Logged out,<a href = "/">点击重新登录</a>'@app.route('/page')
def page():if 'logged_in' in session:return '这是授权页内容,<a href = "/logout">退出登录</a>'else:return redirect(url_for('login'))if __name__ == '__main__':app.run()

login.html 页面入下:

<html lang="en"><head><meta charset="UTF-8"><title>Login</title>
</head>
<body><form action="http://localhost:5000/login" method="post"><table><tr><td>Username</td><td><input type="username" name="username"></td></tr><tr><td>Password</td><td><input type="password" name="password"></td></tr><tr><td><input type="submit" value="Submit"></td></tr></table></form>{% if error %}<p><strong>Error</strong>:{{error}}</p>{% endif %}
</body>
</html>

在上面的例子中,通过 POST 请求 /login 路由来接收用户提交的用户名和密码,并在用户登录成功时将 logged_in 标记设置为 True,表示用户已经登录。然后,在访问 /page 路由时,检查用户是否已登录,如果未登录则提示去登录。

注意,当我们在浏览器中点击登录按钮,表单通过 POST 请求提交到 /login 路由,如果登录成功,直接reurn 'Login successful'这样写的话,页面一开始进去显示 “Login successful”,此时,如果在浏览器中直接进行页面刷新(比如按下 F5 键),浏览器会重新发送上一次的请求。如果上一次的请求是一个 POST 请求,那么刷新操作也会发送一个相同的 POST 请求,而不是一个 GET 请求。这是因为浏览器的刷新操作会重复最后一次的请求,不论它是 GET 请求还是 POST 请求。对于 POST 请求,许多浏览器会显示一个对话框,警告用户刷新页面将会重新提交表单。如果用户选择继续,浏览器就会再次发送 POST 请求到服务器。

为了避免在登录成功后直接刷新页面导致再次发送 POST 请求的问题,在这里我们 POST 请求并完成相关操作(比如用户登录)后,进行一个重定向操作到另一个页面或路由。这种方法被称为 Post/Redirect/Get (PRG) 模式,它可以防止表单的重复提交。

这只是一个简单的示例,实际应用中用户登录验证可能会更加复杂,包括密码哈希存储、用户会话管理等。对于更复杂的用户认证需求,建议使用 Flask 提供的认证扩展或其他第三方库来实现。

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

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

相关文章

论文查重率高,有什么办法降重吗?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

CRM(客户关系管理系统)

商机流程 为什么选择简道云CRM&#xff1f; 行业痛点 很多客户有复杂的订单成本计算方式&#xff0c;复杂多变的审批流程&#xff0c;个性化/流程化的数据结构&#xff0c;没有自定义能力就很难满足。 解决方案 在CRM套件的基础上自定义编辑/搭建了适合公司业务的CRMERP 两…

PCIE协议-2-事务层规范

1.事务层概述 从高层次上看&#xff0c;事务层的关键方面包括&#xff1a; 一个流水线化的全分割事务协议用于区分事务层数据包&#xff08;TLPs&#xff09;的排序和处理要求的机制基于信用量的流控制可选支持数据中毒和端到端数据完整性检测 事务层包含以下内容&#xff1…

dummy_worker C++ 预占用部分比例cpu资源,人为创造cpu资源紧张

背景 有时候为了C测试程序在cpu资源紧张情况下是否正常&#xff0c;需要人为创造cpu资源紧张 编译方法 g -o dummp_worker dummp_worker.cpp -stdc11 -pthread 使用方法 ./dummp_worker 4 0.2 占用4个cpu核的20%比例的cpu资源 源码 // dummp_worker.cpp #include <c…

Axure RP 9:卓越的交互式产品原型设计工具

Axure RP 9&#xff0c;作为一款备受欢迎的交互式产品原型设计工具&#xff0c;已经在全球范围内赢得了众多设计师和开发者的青睐。这款软件凭借其强大的功能和出色的用户体验&#xff0c;成为了产品原型设计领域的佼佼者。 Axure RP 9支持Mac和Windows两大操作系统&#xff0…

Java并发编程:面经总结

1、描述Synchronized和reentrantlock的底层实现和重入的底层原理 2、描述锁的四种状态和升级过程 3、CAS是什么及ABA问题如何解决 4、请谈一下AQS&#xff0c;为什么AQS的底层是CAS volatile 5、DCL单例为什么要加volatile 6、聊聊你对as-if-serial和happens-before语义的…

Ubuntu22安装docker

安装步骤 1. 更新软件包索引 首先&#xff0c;打开终端并更新你的软件包列表以确保访问到最新的软件包版本&#xff1a; sudo apt-get update 2. 安装必要的依赖项 安装几个必需的软件包&#xff0c;这些软件包让apt能够通过HTTPS使用仓库&#xff1a; bash sudo apt-ge…

茅台申购,多平台签到与通知 | 使用极空间NAS部署一个神级脚本『DailyCheckIn』

茅台申购&#xff0c;多平台签到与通知 | 使用极空间NAS部署一个神级脚本『DailyCheckIn』 哈喽小伙伴们好&#xff0c;我是Stark-C~&#xff0c;今天为大家分享一个极空间上非常实用且好玩的项目。 小伙伴们都知道&#xff0c;目前很多平台为了促进用户的活跃度和黏性&#…

LeetCode--所有质数、质数对

1.0 Q: 输出 100 以内所有质数 1.1 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100…

如何彻底将CAD或者Cadence卸载干净

最近因为升级软件需要先彻底删除这两个软件&#xff0c;发现无论如何都不能卸载干净&#xff0c;于是乎找到这样一个软件帮助卸载或查找剩余的软件残留&#xff1a; 官网&#xff1a;https://geekuninstaller.com 支持软件和 UWP 应用的卸载&#xff0c;查看软件注册表和安装目…

[leetcode] 68. 文本左右对齐

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff…

Unity 状态机

文章目录 前言一、状态机二、应用1、场景切换2、人物行为切换3、宝箱、机关切换4、AI 三、人物行为总结 前言 提到Unity状态机&#xff0c;接触不久的开发者会想到Unity的动画状态机&#xff0c;而对于老油条来说&#xff0c;可能会回忆起自己实现的动画状态机。当然&#xff…

The 2024 International Collegiate Programming Contest in Hubei Province, China

目录 H. Genshin Impact Startup Forbidden III K. Points on the Number Axis B 估计还会补D&#xff0c;I H. Genshin Impact Startup Forbidden III 对于一个有鱼的池塘&#xff0c;有周围与自己本身五个关键位置可以捕获当前位位置的鱼。把这些位置存储到 map中。用四进制…

深入理解京东商品搜索API(jd.item_search)返回值结构

京东商品搜索API&#xff08;jd.item_search&#xff09;的返回值结构通常是一个复杂的JSON对象&#xff0c;它包含了关于搜索结果的详细信息。为了深入理解这个返回值结构&#xff0c;我们可以将其大致分解为几个主要部分。 status: code: 响应状态码&#xff0c;通常200表示成…

数据治理实施方案大纲

一、引言 背景介绍 阐述数据治理的重要性和必要性回顾公司或组织在数据管理方面的发展历程指出当前数据管理面临的挑战和机遇 目标和愿景 明确数据治理的总体目标和愿景设定短期和长期的数据治理目标 范围和限制 定义数据治理项目的范围和边界识别可能影响项目成功的限制因素 …

新品 | 功率放大器高压放大测试器HAP-4001

400V功率放大器是一台非常实用的讯号放大器&#xff0c;它具有体积小、重量轻及操作方便&#xff0c;较高的电压输出(400Vp-p)以及较大的输出电流&#xff08;2.8Ap-p&#xff09;等优点。 HAP-4001连续输出直流电流量最大值达到0.5 A&#xff0c;电压放大增益40倍&#xff0c…

OSI七层模型

ISO为了更好的使网络应用更为普及&#xff0c;推出了OSI参考模型。 &#xff08;1&#xff09;应用层 OSI参考模型中最靠近用户的一层&#xff0c;是为计算机用户提供应用接口&#xff0c;也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有&#xff1a;HTTP&…

Java---类和方法的再学习

上一篇主要介绍了面向对象的思想以及内存实现&#xff0c;关于类与对象感觉写的不够好&#xff0c;因此才会有这一篇作为补充&#xff1b; 一&#xff1a;类与对象 &#xff08;1&#xff09;类 一些相同属性和行为的事物的统称&#xff0c;比较广泛、抽象&#xff0c;比如…

Echarts柱状图横坐标不显示

本人遇到的问题&#xff1a;折线图横坐标可以正常显示 柱状图接收一样的数据在横坐标却显示不了 1.在前端打印是否能够正常接收数据、数据类型是否有误以及数据是否有内容 console.log(typeof optionbar.xAxis.data)console.log(optionbar.xAxis.data) 2.如上确定能够接收到数…

netty 高性能架构设计--零拷贝

文章目录 前言一、直接内存1.1 什么是直接内存1.2 代码实现1.3 使用直接内存的优缺点 二、netty 零拷贝设计2.1 netty 直接内存2.2 netty 内存池 三、零拷贝的两种方式 前言 本篇从源码层面剖析 netty 高性能架构设计之零拷贝&#xff0c;并且扩展讲述零拷贝的两种实现方式。 …