from flask import Flask, request, jsonify, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(24) 
users = {
'123': 'admin',
'admin': 'admin'
}
# 登录接口
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username in users and users[username] == password:
session['logged_in'] = True
return 'Login successful', 200
else:
return 'Login failed', 401

这段代码是一个简单的 ​Flask​ 后端应用,实现了一个用户登录功能,并使用 ​Session​ 来管理用户登录状态。以下是代码的详细解释:


1. 导入必要的模块

from flask import Flask, request, jsonify, session
import os
  • ​**Flask**​:Flask 框架的核心类,用于创建 Web 应用。
  • ​**request**​:用于处理 HTTP 请求(如获取 POST 数据)。
  • ​**jsonify**​:用于返回 JSON 格式的响应(虽然代码中没有直接使用)。
  • ​**session**​:用于管理用户会话(Session),存储登录状态等信息。
  • ​**os**​:用于生成安全的随机密钥。

2. 创建 Flask 应用

app = Flask(__name__)
app.secret_key = os.urandom(24)  # 设置一个密钥,用于加密 session 数据
  • ​**app = Flask(__name__)**​:创建一个 Flask 应用实例。
  • ​**app.secret_key = os.urandom(24)**​:
    • ​**secret_key**​ 是 Flask 用来加密 Session 数据的密钥。
    • ​**os.urandom(24)**​ 生成一个 24 字节的随机密钥,确保 Session 数据的安全性。

3. 模拟用户数据

users = {'123': 'admin','admin': 'admin'
}
  • 这是一个简单的字典,存储用户名和密码(实际项目中应该使用数据库)。
  • 示例用户:
    • 用户名 123,密码 admin
    • 用户名 admin,密码 admin

​4. 登录接口 /login

@app.route('/login', methods=['POST'])
def login():data = request.get_json()  # 获取 POST 请求的 JSON 数据username = data.get('username')  # 获取用户名password = data.get('password')  # 获取密码if username in users and users[username] == password:session['logged_in'] = True  # 登录成功,设置 Sessionreturn 'Login successful', 200  # 返回成功消息else:return 'Login failed', 401  # 返回失败消息

功能解析

  1. ​**@app.route('/login', methods=['POST'])**​:
    • 定义了一个 ​POST​ 请求的路由 /login,用于处理登录请求。
  2. ​**data = request.get_json()**​:
    • 获取客户端发送的 ​JSON 数据​(如 {"username": "hami", "password": "admin"})。
  3. ​**username = data.get('username')​ 和 ​password = data.get('password')**​:
    • 从 JSON 数据中提取 username 和 password
  4. 验证用户
    • 检查 username 是否在 users 字典中,并且密码是否匹配。
    • 如果匹配:
      • ​**session['logged_in'] = True**​:设置 Session,标记用户已登录。
      • ​**return 'Login successful', 200**​:返回成功消息(HTTP 200)。
    • 如果不匹配:
      • ​**return 'Login failed', 401**​:返回失败消息(HTTP 401 未授权)。

5. Session 的作用

  • ​**session['logged_in'] = True**​:
    • 在用户登录成功后,Flask 会存储一个加密的 Session Cookie 在客户端(浏览器)。
    • 后续请求会自动携带这个 Cookie,服务器可以检查 session['logged_in'] 来判断用户是否登录。
  • ​**secret_key**​ 的作用:
    • 确保 Session 数据不会被篡改(因为数据是加密的)。

6. 如何测试这个 API?​

可以使用 ​Postman​ 或 ​curl​ 发送 POST 请求:

curl -X POST http://127.0.0.1:5000/login \-H "Content-Type: application/json" \-d '{"username": "hami", "password": "admin"}'

成功响应:​

Login successful

失败响应:​

Login failed

7. 可能的改进

  1. 使用数据库存储用户​(如 SQLite、MySQL)。
  2. 密码加密存储​(如 bcrypt 或 hashlib)。
  3. 添加注销功能​(session.pop('logged_in', None))。
  4. 返回 JSON 格式的响应​(如 jsonify({"message": "Login successful"}))。

总结

  • 这是一个简单的 ​Flask 登录 API,使用 ​Session​ 管理登录状态。
  • 适用于小型应用或学习 Flask 的 Session 机制。
  • 实际项目中需要更安全的用户管理和数据库支持。

 

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

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

相关文章

spring-webmvc @PathVariable 典型用法

典型用法 基础用法 GetMapping("/users/{id}") public String getUser(PathVariable Long id) {return "User ID: " id; } 请求:/users/1001 输出:User ID: 1001---- GetMapping("/users/{userId}/orders/{orderId}") …

LVS+Keepliaved高可用群集

目录 keepalived双击热备基础知识1.keepallived概述及安装keepalived的热备方式 2.使用keepalived实现双机热备 案例1.基础主备调度器环境配置2.配置主调度器3.配置从调度器4.配置两台节点服务器5.测试 keepalived双击热备基础知识 Keepalived 起初是专门针对 LVS 设计的一款强…

在Unreal Engine 5(UE5)中,Get PlayerPawn和Get PlayerController的区别以及如何计算玩家和目标之间的距离。

一、两者区别 在Unreal Engine 5(UE5)中,获取玩家的位置信息通常有两种方式:通过PlayerPawn或通过PlayerController。具体使用哪一个取决于你想要获取的是哪个实体的位置。 1.Get Player Pawn: PlayerPawn是玩家实际…

linux线程同步

互斥锁 同步与互斥概述** 现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任…

Spring 的IoC 和 AOP

第一部分:关于 IoC (控制反转) 1. 核心思想 (What & Why) 首先,我会先解释 IoC 的核心思想,而不是直接讲技术。 “IoC,即控制反转,它是一种重要的设计思想,而不是一个具体的技术。它的核心是将传统上…

[实战] Windows 文件读写函数 `ReadFile()` 和 `WriteFile()` 的阻塞与非阻塞操作详解(含完整C语言示例)

Windows 文件读写函数 ReadFile() 和 WriteFile() 的阻塞与非阻塞操作详解(含完整C语言示例) 在 Windows 平台进行文件或设备(如串口、管道)编程时,ReadFile() 和 WriteFile() 是最常用的两个 API 函数。它们既可以以…

Singularity 安装

Singularity 是什么? 核心功能:用于创建/运行容器(将应用+依赖打包的独立环境)。 与 Docker 的区别:专为 HPC(高性能计算)设计,无需后台守护进程,支持非 root 运行容器(但安装本身需 root 权限)。 适用于在具有 root 权限的计算机上从源代码安装 Singularity。…

辩证视角下 “辫子戏” 的文化反思与价值重构

前阵子播出的《人生若如初见》刻意美化晚清封建统治阶级,淡化甚至掩盖清政府闭关锁国、丧权辱国、残酷压迫民众等历史真相,将本应批判反思的腐朽统治包装成值得歌颂的对象;在历史叙事上,或通过虚构、篡改重要历史事件和人物形象&a…

MCP-server

💡 说明:该模块是 MCP 服务器的 数据中继层,确保安全高效地从分布式来源获取模型及其上下文,适用于边缘计算和联邦学习场景。若要查看完整代码,建议直接访问 GitHub 链接

第3讲、LangChain性能优化:上下文缓存与流式响应实战指南

目录 概述上下文缓存优化流式响应优化复杂对话场景性能优化用户体验优化策略完整实现示例性能监控与调优总结 概述 在复杂对话场景中,大型语言模型面临着响应延迟、重复计算、上下文管理等挑战。本文将详细介绍如何通过LangChain的上下文缓存和流式响应功能来优化…

http中GET和POST、PUT之间的区别

在HTTP协议中,GET、POST和PUT是三种最常用的请求方法,它们的主要区别如下: 1. GET 用途:用于请求资源(查询数据),不应修改服务器状态。 参数传递:通过URL的查询字符串(…

埃夫特各种系列机器人运动学建模、轨迹规划和工作空间求解

要求: 1.理论分析 1.1 正向运动学:根据D-H法完成机器人的正向运动学(数学建模后基于Matlab计算公式); 1.2 工作空间分析:根据正向运动学结果,运用 MATLAB进行工作空间分析,完成工…

VUE3 路由的跳转方法

Routerlink跳转方法 name属性对应了路由文件配置的name path属性对应了路由的路径 <RouterLink to"/login">点击跳转登陆</RouterLink> <RouterLink :to"{name:login}">点击跳转登陆</RouterLink> <RouterLink :to"{pat…

数据库中间件ShardingSphere5

一、高性能架构模式 数据库集群&#xff0c;第一种方式“读写分离”&#xff0c;第二种方式“数据库分片”。 1.1 读写分离架构 读写分离原理&#xff1a;将数据库读写操作分散到不同的节点上。 读写分离的基本实现&#xff1a; 主库负责处理事务性的增删改操作&#xff0c…

C++11 右值引用(Rvalue Reference)

在 C++11 中,右值引用(Rvalue Reference) 是一个革命性的语言特性,它为现代 C++ 的性能优化、资源管理以及语义清晰化奠定了基础。通过引入 T&& 语法,C++11 支持了 移动语义(Move Semantics) 和 完美转发(Perfect Forwarding),极大地提升了程序效率和代码表达…

skynet源码学习-skynet_main入口

skynet源码学习-skynet_main入口 核心功能与启动流程Shell脚本启动示例main函数参数处理其他相关联函数解析1. 配置加载器解析2. 环境变量设置3. 配置解析函数 核心配置项解析典型配置文件分析服务启动与运行核心服务启动流程完整启动时序图 核心功能与启动流程 Skynet 的启动…

前端图文混排页面一键导出PDF最佳实践 —— 以Vue3+html2pdf.js为例

前言 在现代管理系统中,数据的归档、分享和线下流转需求日益增长。如何将前端页面的图文内容高质量导出为PDF,成为许多企业和开发者关注的技术点。本文以实际项目为例,系统梳理前端导出PDF的完整实现思路与优化经验。 一、项目背景与需求分析 1.1 背景故事 在某管理系统的…

19|Whisper+ChatGPT:请AI代你听播客

今天&#xff0c;我们的课程开始进入一个新的主题了&#xff0c;那就是语音识别。过去几周我们介绍的ChatGPT虽然很强大&#xff0c;但是只能接受文本的输入。而在现实生活中&#xff0c;很多时候我们并不方便停下来打字。很多内容比如像播客也没有文字版&#xff0c;所以这个时…

linux常用设置

1&#xff0c;ubuntu设置ssh-agent进入shell时自动加载 一&#xff0c;添加自动加载脚本&#xff0c;vim /etc/profile.d/keychain.sh # /etc/profile.d/keychain.sh # 自动启动 ssh-agent 并加载多个私钥 export KEYCHAIN_HOME"/root/.keychain" # 多个key&#xf…

电子电气架构 --- 软件供应商如何进入OEM体系

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…