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

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序,实现了一个简单的登录系统。以下是代码的详细解释:

1. 导入必要的模块:`os` 用于生成密钥,`Flask` 用于创建Web应用程序。
2. 创建Flask应用程序的实例,并为会话管理设置一个密钥。
3. 定义管理员的默认用户名和密码。
4. 定义登录路由('/'),处理GET和POST请求。
    - 如果请求方法是POST,它会获取包含用户名和密码的JSON数据。
    - 然后它会检查提供的用户名和密码是否与默认用户名和密码匹配。
    - 如果凭据有效,它会将用户名存储在会话中。

这个应用程序还包括其他几个路由:
- `/welcome` 路由用于显示欢迎页面,只处理GET请求。它会检查用户是否已登录,如果已登录,则显示欢迎页面,否则重定向到登录页面。
- `/home` 路由用于显示主页,只处理GET请求。它会检查用户是否已登录,如果已登录,则显示主页,否则返回一个JSON响应表示无权限访问主页。
- `/logout` 路由用于注销用户,它会清除会话数据并重定向到登录页面。

如果你运行这个应用程序,它将在本地启动一个Web服务器,并监听默认的端口(通常是5000)。你可以通过访问`http://localhost:5000`来访问登录页面。

项目结构 

app.py

import os
from flask import Flask, render_template, request, redirect, url_for, session, jsonifyapp = Flask(__name__)
app.secret_key = os.urandom(24)# 默认的管理员账号和密码
default_username = 'admin'
default_password = 'admin123'# 路由:登录页面
@app.route('/', methods=['GET', 'POST'])
def login():if request.method == 'POST':# 获取 JSON 数据data = request.get_json()# 获取账号和密码username = data.get('username')password = data.get('password')# 验证账号和密码if username == default_username and password == default_password:# 将用户信息存储到 session 中session['username'] = usernamereturn jsonify({'message': '登录成功'})else:return jsonify({'message': '账号或密码错误'})return render_template('login.html')# 路由:欢迎页面
@app.route('/welcome', methods=['GET'])
def welcome():# 检查用户是否已经登录if 'username' in session:return render_template('welcome.html', username=session['username'])else:return redirect(url_for('login'))# 路由:主页
@app.route('/home', methods=['GET'])
def home():# 检查用户是否已经登录if 'username' in session:return render_template('home.html', username=session['username'])else:return jsonify({'message': '无权限访问主页'})# 路由:注销
@app.route('/logout')
def logout():# 清除 session 数据session.pop('username', None)return redirect(url_for('login'))if __name__ == '__main__':app.run()

templates / login.html

<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><h1>Login</h1><form id="loginForm"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><button type="submit">Login</button></form><div id="message"></div><script>document.getElementById("loginForm").addEventListener("submit", function(event) {event.preventDefault();var username = document.getElementById("username").value;var password = document.getElementById("password").value;var data = {"username": username,"password": password};fetch("/", {method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify(data)}).then(response => response.json()).then(data => {document.getElementById("message").innerText = data.message;if (data.message === "登录成功") {window.location.href = "/welcome";}}).catch(error => {console.error("Error:", error);});});</script>
</body>
</html>

templates / welcome.html

<!DOCTYPE html>
<html>
<head><title>Welcome</title>
</head>
<body><h1>Welcome, {{ username }}!</h1><p>You have successfully logged in.</p><a href="/home">Go to Home</a><br><a href="/logout">Logout</a>
</body>
</html>

templates / home.html

<!DOCTYPE html>
<html>
<head><title>Home</title>
</head>
<body><h1>Welcome, {{ username }}!</h1><p>This is the home page.</p><a href="/logout">Logout</a>
</body>
</html>

testcase.py

import requestssession = requests.Session()def login():data = {"username": "admin","password": "admin123"}url = 'http://127.0.0.1:5000'res = session.request(url=url, method='post', json=data)return sessiondef Welcome():url ='http://127.0.0.1:5000/welcome'res = login().get(url=url)print(res.text)def index_login():url = 'http://127.0.0.1:5000/home'res = login().request(url=url, method='get')print(res.text)def index_notlogin():url = 'http://127.0.0.1:5000/home'res = requests.get(url=url)print(res.json())

相关文章:

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序&#xff0c;实现了一个简单的登录系统。以下是代码的详细解释&#xff1a; 1. 导入必要的模块&#xff1a;os 用于生成密钥&#xff0c;Flask 用于创建Web应用程序。 2. 创建Flask应用程序的实例&#xff0c;并为会话管理设置一个密钥。…...

Spring Security安全配置

使用Spring Boot与Spring MVC进行Web开发时&#xff0c;如果项目引入spring-boot- starter-security依赖启动器&#xff0c;MVC Security 安全管理功能就会自动生效&#xff0c;其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。…...

2023Java后端开发之100道常见经典面试题

目录 1.重载和重写的区别? 2.String 和 StringBuffer、StringBuilder 的区别是什么&#xff1f; 3. 与 equals 的区别&#xff1f; 4.抽象类和接口的区别是什么&#xff1f; 5. 面向对象的特点 6.Collection 和 Collections 有什么区别&#xff1f; 7.List、Set、Map 之…...

Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用

目录 1、安装命令2、应用场景3、优缺点4、案例分析5、各个开发语言如何应用&#xff1f; Redis 是一个基于内存的开源数据库系统&#xff0c;被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。下面是 Redis 的详解&#xff0c;包括安装命令、应用场景和优缺点&#xff…...

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…...

mac关闭VPN之后,浏览器就不能够正常上网了(图解)

可能打开谷歌浏览器会显示无法正常连接网络等信息&#xff0c;这个时候可以按照以下步骤&#xff1a; 点击"检查代理服务器地址" 会显示以下这段话&#xff0c;按照这个步骤来操作就可以了。 打开系统偏好设置&#xff0c;点击网络 点击高级 取消掉所有已勾选代…...

YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制...

基于WSL2、Ubuntu和VS Code的CUDA平台运行C语言程序

一、CUDA程序执行方法 执行步骤为&#xff1a; 安装Visual Studio Code。在Visual Studio Code中安装插件WSL与电脑的WSL2进行连接。点击左下角&#xff0c;然后再选择连接到WSL。 在WSL中创建以 .cu 为后缀的文件。 rootDESKTOP-HR6VO5J:~# mkdir CUDA /…...

构建外卖系统小程序,订单管理功能实现步骤详解

外卖系统小程序是近年来越来越受欢迎的一种订餐方式&#xff0c;方便快捷&#xff0c;并且可以减少人与人之间的接触&#xff0c;更加卫生安全。为了搭建一个完善的外卖系统小程序&#xff0c;订单管理功能是必不可少的一部分。在本文中&#xff0c;我们将详细介绍如何实现订单…...

用asp.net开发h5网页版视频播放网站,类似优酷,jellyfin,emby

之前用jellyfin开源软件搞了一个视频播放服务器,用来共享给家里人看电影和电视剧,jellyfin虽然各方面功能都很强大,但是界面和使用习惯都很不适合,于是就想着利用下班休息时间做一套自己喜欢的视频网站出来. 本来是打算直接用jellyfin的源码进行修改,源码是用C# netcore 写的服…...

Redis—相关背景

Redis—相关背景 &#x1f50e;Redis—特性In-memory data structures—在内存中存储数据Programmability—可编程性Extensibility—可扩展性Persistence—持久化Clustering—集群High availability—高可用 &#x1f50e;Redis 为什么快&#x1f50e;Redis 的使用场景Real-tim…...

SSL 证书过期巡检脚本

哈喽大家好&#xff0c;我是咸鱼 我们知道 SSL 证书是会过期的&#xff0c;一旦过期之后需要重新申请。如果没有及时更换证书的话&#xff0c;就有可能导致网站出问题&#xff0c;给公司业务带来一定的影响 所以说我们要每隔一定时间去检查网站上的 SSL 证书是否过期 如果公…...

leetcode 面试题 01.03. URL化

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;面试题 01.03. URL化 思路&#xff1a; 计算出空格的个数&#xff0c;我们可以知道最后一个字符的位置 endPos&#xff0c;再从后 end 向前遍历若不是空格正常拷贝&#xff0c;是空格则替换成 %20&#xff0c;最终当空格…...

uni-app在小米手机上运行【步骤细节】

注意细节重点&#xff1a; 1.手机使用数据线与电脑连接&#xff0c;手机连接模式必须是传输文件模式 2.手机必须打开开发者模式 3.打开开发者模式后&#xff0c;仔细浏览并调整USB调试权限&#xff0c;重点打开USB是否允许安装按钮&#xff01;&#xff01;&#xff01; 操作步…...

微信小程序实现日历功能、日历转换插件、calendar

文章目录 演示htmlJavaScript 演示 效果图 微信小程序实现交互 html <view wx:if"{{calendarArr.length}}"><view class"height_786 df_fdc_aic"><view class"grid_c7_104"><view class"font_weight_800 text_align…...

【浩鲸科技】济南Java后端面经

本文目录 写在前面试题总览题目解析1.说一下SpringBoot中常用的注解2.Redis中的基本数据类型3.TCP的网络协议4.java中常见的锁5.Hashmap的底层数据结构、底层源码、扩容机制源码6.java面向对象的特点 写在前面 关于这个专栏&#xff1a; 本专栏记录一些互联网大厂、小厂的面试实…...

VMware搭建Hadoop集群 for Windows(完整详细,实测可用)

目录 一、VMware 虚拟机安装 &#xff08;1&#xff09;虚拟机创建及配置 &#xff08;2&#xff09;创建工作文件夹 二、克隆虚拟机 三、配置虚拟机的网络 &#xff08;1&#xff09;虚拟网络配置 &#xff08;2&#xff09;配置虚拟机 主机名 &#xff08;3&#xf…...

【Rust 基础篇】Rust关联类型:灵活的泛型抽象

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。为了实现这一目标&#xff0c;Rust引入了"所有权系统"、"借用检查器"等特性&#xff0c;有效地避免了常见…...

学习笔记21 list

一、概述 有两种不同的方法来实现List接口。ArrayList类使用基于连续内存分配的实现&#xff0c;而LinkedList实现基于linked allocation。 list接口提供了一些方法&#xff1a; 二、The ArrayList and LinkedList Classes 1.构造方法 这两个类有相似的构造方法&#xff1a…...

微信小程序弱网监控

前言 在真实的项目中&#xff0c;我们为了良好的用户体验&#xff0c;会根据用户当前的网络状态提供最优的资源&#xff0c;例如图片或视频等比较大的资源&#xff0c;当网络较差时&#xff0c;可以提供分辨率更低的资源&#xff0c;能够让用户尽可能快的看到有效信息&#xf…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...