Flask 使用Flask的session来保存用户登录状态例子

news2024/11/24 13:30:35

使用Python的Flask库实现的登录接口、查询金额接口和注销接口的示例。

  1. 当用户发送POST请求到/login接口时,代码会获取请求中的用户名和密码。如果用户名和密码匹配(在示例中是'admin'和'admin123'),则会将用户名保存在session中,并将session设置为永久有效。这意味着用户在60分钟内可以保持登录状态,即使关闭浏览器或重新启动应用程序。
  2. 当用户发送GET请求到/query_balance接口时,代码首先检查session中是否存在用户名并且用户名为'admin',以确保用户已经登录。如果没有登录或者登录的用户名不是'admin',则返回提示信息"Please login first"。如果用户已经登录,代码可以添加查询金额的逻辑,并将金额作为JSON响应返回给用户。
  3. 当用户发送POST请求到/logout接口时,代码首先检查session中是否存在用户名。如果没有登录,则返回提示信息"Please login first"。如果用户已经登录,代码会从session中删除保存的用户名,并销毁整个session对象,以注销用户。
  4. 这个示例代码使用了Flask的session来管理用户登录状态。session是一种在服务器端存储和跟踪用户信息的机制。在这个示例中,session使用了随机生成的密钥来加密和解密数据,以确保安全性。app.secret_key用于设置session密钥。
import os
from datetime import timedelta
from flask import Flask, request, session, jsonify

app = Flask(__name__)
app.secret_key = os.urandom(24)  # 随机生成session密钥
app.permanent_session_lifetime = timedelta(minutes=60)  # 设置session时效为60分钟


@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')

    if username == 'admin' and password == 'admin123':
        session.permanent = True  # 设置session为永久有效
        session['username'] = username
        return 'Login successful'
    else:
        return 'Invalid username or password'


@app.route('/query_balance', methods=['GET'])
def query_balance():
    if 'username' not in session or session['username'] != 'admin':
        return 'Please login first'

    # 这里可以添加查询金额的逻辑
    balance = 8848

    return jsonify({'balance': balance})


@app.route('/logout', methods=['POST'])
def logout():
    if 'username' not in session:
        return 'Please login first'

    session.pop('username', None)  # 删除session中的'username'键
    session.clear()  # 销毁整个session对象
    return 'Logout successful'


if __name__ == '__main__':
    app.run()

 请求登陆接口,登陆成功返回提示

 已请求登陆接口,查询金额接口,返回金额

 请求注销接口,返回注销成功提示

 未登陆时,请求注销接口,提示请先登陆

 未登陆时,请求查询金额接口,提示请先登陆

 

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

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

相关文章

Scratch 放置建筑

Scratch 放置建筑 本程序的功能是放置和删除建筑。点击鼠标时建筑会复制并从初始位置向鼠标指针移动,每次复制都更换外观,距离鼠标指针较近时停止移动并调至垂直方向,延时0.5秒。延时过后鼠标指针接触到建筑每隔0.1秒进行判断,3次…

HOT62-N皇后

leetcode原题链接:N皇后 题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返…

灵活用工服务平台是怎样的?

灵活用工服务平台是为企业提供灵活用工人员招募、管理和支付等服务的平台。这些平台通常会建立一套在线系统,帮助企业发布岗位需求,筛选和招募合适的灵活用工人员,管理他们的工作时间和报酬。 企业选择做灵活用工的原因有这些: 1…

虚幻插件Landscaping Landscaping Mapbox

虚幻插件Landscaping & Landscaping Mapbox Landscaping offers an easy way to import GIS data as single Landscape or World Composition (UE4) or World Partition (UE5) or Procedural/Static Mesh. 提供了一种非常简单的方式来导入GIS数据,可以生成Lands…

力扣C++|一题多解之数学题专场(1)

目录 7. 整数反转 9. 回文数 12. 整数转罗马数字 13. 罗马数字转整数 29. 两数相除 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 -如果反转后整数超过 32 位的有符号整数的范围 [2^31, 2^31 -1] ,就返回 0。…

springboot项目中添加自定义日志

文章目录 当前项目使用的springboot为 2.2.2.release。低版本的话logging下的子标签有可能不是这样的。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELE…

vue 项目优化

去除冗余的css 消除框架中未使用的CSS,初步达到按需引入的效果 使用背景&#xff1a;vue2.x, webpack3.x 使用插件&#xff1a;purifycss-webpack 安装&#xff1a; npm i purifycss-webpack purify-css glob-all -D安装后各个插件的版本&#xff1a; “glob-all”: “^3.3.…

基于linux下的高并发服务器开发(第一章)- GDB调试(3)1.15

04 / GDB命令&#xff1a;断点操作 其中num代表断点编号&#xff0c;Type&#xff08;类型&#xff09;为断点&#xff08;breakpoint&#xff09;&#xff0c;Disp为断点状态&#xff0c;Enb是yes代表为有效断点&#xff0c;adress为断点地址&#xff0c;What说明断点的在那个…

APACHE KAFKA本机Hello World教程

目标 最近想要简单了解一下Apache Kafka&#xff0c;故需要在本机简单打个Kafka弄一弄Hello World级别的步骤。 高手Kafka大佬们&#xff0c;请忽略这里的内容。 步骤 Apacha Kafka要求按照Javak8以上版本的环境。从官网下载kafka并解压。 启动 # 生产kafka集群随机ID KA…

游戏AI的崛起:腾讯、网易等企业引领行业变革

随着游戏AI技术的迅猛发展&#xff0c;游戏行业正在经历一场前所未有的变革。在这个数字化时代&#xff0c;腾讯、网易等行业领先企业正以惊人的步伐在游戏AI领域取得重要进展。他们已经进入了游戏AI的2.0阶段&#xff0c;实现了内容多元化和行为智能化。尤其引人瞩目的是&…

SOLIDWORKS PDM—文件类别的限定

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…

【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

superset安装

1、拖动安装包 sh Miniconda3-latest-Linux-x86_64.sh安装路径&#xff1a; /usr/local/miniconda3 2、配置环境变量 在/etc/profile中添加两句 export CONDA_HOME/usr/local/miniconda3 export PATH$PATH:$CONDA_HOME/bin重新加载环境变量 source /etc/profile3、取消激活…

javascript循环数组有什么方法

javascript循环数组的方法 1、循环遍历数组 问题&#xff1a;想要很容易地访问数组的所有元素。 for循环可以用来访问数组的每一个元素。数组从0开始&#xff0c;而且数组属性length用来设定循环结束。 2、按顺序存储和访问值 问题&#xff1a;想要以这样一种方式来存储值&a…

怎么转发别人的朋友圈到自己朋友圈?

一键转发朋友 搜索指定好友&#xff0c;选择好友朋友圈内容&#xff0c;点击转发 2.转发后会跳到【发朋友圈】页面&#xff0c;可直接发送&#xff0c;也可二次编辑&#xff08;修改文案&#xff09;

SpringCloud——消息驱动Stream

屏蔽底层消息中间件MQ的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。 生产者 一、依赖 spring-cloud-starter-stream-rabbit &#xff08;rabbitMQ中间件&#xff09; 二、配置文件 server:port: 8801spring:application:name: cloud-stream-providercl…

从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别

目录 1. 关联式容器 1.1 树形结构的关联式容器 2. set的相关介绍 2.1 set的构造和迭代器 2.2 set的容量和操作函数 2.3 set使用代码 2.4 multiset使用 3. map的相关介绍 3.1 键值对 3.2 map的构造和迭代器 3.3 map的容量和操作函数 3.4 map使用代码 3.5 multimap使…

ai绘画软件免费下载哪个好用?探索ai绘画生成器

曾经有一个年轻的艺术爱好者&#xff0c;名叫小明。他对绘画充满热情&#xff0c;渴望能够通过绘画表达自己的创造力和想法。然而&#xff0c;他并没有接受过正规的美术训练&#xff0c;也没有负担得起的昂贵绘画软件。因此&#xff0c;他开始思考ai绘画软件免费下载哪个好用&a…

SpringCloud——消息总线Bus

SpringCloud Bus将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;是对SpringCloud Config的加强&#xff0c;广播自动版的配置。 支持两种消息代理&#xff1a;RabbitMQ和Kafka 一、创建工程&#xff0c;添加依赖 spring-cloud-starter-config spring-cloud-st…

【DeepSpeed 教程】四,DeepSpeed ZeRO++博客和代码解析

0x0. 系列文章 DeepSpeed-Chat 打造类ChatGPT全流程 笔记二之监督指令微调DeepSpeed-Chat 打造类ChatGPT全流程 笔记一【DeepSpeed 教程翻译】三&#xff0c;在 DeepSpeed中使用 PyTorch Profiler和Flops ProfilerDeepSpeed结合Megatron-LM训练GPT2模型笔记&#xff08;上&…