在Flask中构建API接口
重定向行为
斜杠
以下两个路由的不同之处在于是否使用尾部的斜杠。
第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。
第二个路由的URL没有尾部斜杠,因此其行为表现与一个文件类似,如果访问这个URL时添加了尾部斜杠就会得到一个404错误,这样可以保持URL唯一,并帮助搜索引擎避免重复索引同一页面。
@app.route('/home/')
def hello_world():return 'Hello World!'@app.route('/home')
def hello_world():return 'Hello World!'
redirect
from flask import Flask, redirect@app.route('/baidu')
def baidu():return redirect('https://www.baidu.com')
Flask HTTP方法
1 | GET | 请求指定的页面信息,并返回实体主体。 |
---|---|---|
2 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
3 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
4 | DELETE | 请求服务器删除指定的页面。 |
@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return do_the_login()else:return show_the_login_form()
登录登出案例
# 登录
@app.route("/login", methods=['POST'])
def login():"""username: 123456password: 123456:return:"""get_data = request.get_json()username = get_data.get("username")password = get_data.get("password")if not all([username, password]):return jsonify(msg="参数不完整")if username == '123456' and password == '123456':# 如果验证通过,保存登录状态在session中session['username'] = usernamereturn jsonify(msg='登录成功')else:return jsonify(msg='账号或密码错误')# 检查登录状态
@app.route("/session", methods=["GET"])
def check_session():username = session.get("username")if username is not None:return jsonify(username=username)else:return jsonify(msg="出错了,没登录")# 登出
@app.route('/logout', methods=['GET'])
def logout():session.clear()return jsonify(msg='成功退出登录')
Cookie
要访问cookie,可以使用cookie属性,通过使用响应对象的set_cookie方法来设置cookie。请求对象的cookie属性是一个包含了客户端传输的所有cookie的字典。在Flask中,如果使用session,就不要直接使用cookie,因为session比较安全一些。
Session
session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证。
一、配置SECRET_KEY
因为flask的session是通过加密之后放到了cookie中,所以需要配置“SECRET_KEY”。
配置方法
新建一个config.py的文件配置secret_key
config.py
SECRET_KEY = 'XXXXXXXXX'
然后在主运行文件里面添加config文件里面的内容。
from flask import Flask,session
import config
app = Flask(__name__)
app.config['SECRET_KEY'] = config.SECRET_KEY # 写法一
app.secret_key = config.SECRET_KEY # 写法二
二、操作session
操作session的方法就如同操作字典。
设置session
# 设置session
@app.route('/')
def set():session['name'] = 'lili' # 设置“字典”键值对return 'success'
读取session
因为session就像字典一样所以,操作它的时候有两种方法:
- (1)result = session[‘key’] :如果内容不存在,将会报异常。
- (2)result = session.get(‘key’) :如果内容不存在,将返回None(推荐用法)。
# 读取session
@app.route('/get')
def get():session['name'] # 写法一session.get('name') # 写法二return 'success'
删除session
# 删除session
@app.route('/delete/')
def delete():session.pop('name',None) # 写法一session['name'] = False # 写法二return 'success'
清除session中所有数据
# 清除session中所有数据
@app.route('/clear')
def clear():session.clear()return 'success'
三、设置session的过期时间
若没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。session.permanent = True
语句在flask下则可以将有效期延长至一个月。
方法一
# 设置session@app.route('/')def set():session['name'] = 'lili'session.permanent = True # 长期有效,一个月的时间有效return 'success'
方法二
- 1.引入包:
from datetime import timedelta
- 2.配置有效期限:
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
- 3.设置:
session.permanent = True
#encoding: utf-8
from flask import Flask,session
from datetime import timedelta
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 # 设置session
@app.route('/')
def set():session['username'] = 'liefyuan'session.permanent = Truereturn 'success'
Postman
在构建API接口时,可以使用Postman工具来进行接口测试。
Postman界面导航
相关文章:

在Flask中构建API接口
重定向行为 斜杠 以下两个路由的不同之处在于是否使用尾部的斜杠。 第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。 第二个路由的URL没有尾部…...

Postgres vs MySQL
主要区别及示例 简而言之,Postgres 和 MySQL 之间的主要区别实际上归结为主索引和辅助索引的实现方式以及数据的存储和更新方式。 让我们进一步探讨这个问题。 但首先... 基础知识 索引是一种数据结构(主要是 B 树),允许通过…...
02.IP地址以及静态路由配置
文章目录 IP地址IP地址分类IPV4地址(32位)IPV4地址的分类特殊IP地址 VLSM --- 可变长子网掩码(子网划分)CLDR --- 无类域间路由(汇总)配置静态路由的基础配置静态路由的拓展配置 IP地址 IP地址分类 IPV4(32位二进制构成) — 点分十进制IPV6(128位二进制构成) — 冒分十六进制…...
GD32(STM32)因为中断问题,导致不能进行程序 正常运行
项目中,之前定时器中断就用了个TIM2,但后来程序优化需要再加一个计数定时器TIM6, TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 开启定时器时钟,即内部时钟CK_INT72M RCC_APB1PeriphClockCmd(RCC_APB1Perip…...

华为OD机试真题B卷 Java 实现【统计字符】,附详细解题思路
一、题目描述 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。 数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000 。 二、输入描述 输入一行字符串,可以有空格。 三、输出描述 统计其中英文字符&#…...
深入理解设计原则之开闭原则(OCP)
系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 OCP:开闭原则 系列文章目录1、开闭原则的定义和解读2、如何理解“对扩展开放,对修改关闭”3、实现开闭原则的方法4、如何在团队协作中保证开闭原则的实…...

【学习随笔】
2022/11/13 HTML :讲完了 css:讲完了 作业:编写登陆界面、整理一下sql优化,对于mybatis不熟练的继续练习 关于MySQL优化的问题? 思路总结:主要考虑数据库优化与SQL语句优化。 1,数据库优化,包括存储引擎的优化&…...
【多路IO复用】select
select: 1.select:当被监听的 fd(文件描述符)就绪后会返回,但是我们无法知道具体是哪些 fd 就绪了,只能遍历所有的 fd。通常来说某一时刻,就绪的 fd 并不会很多,但是使用 select 必须要遍历所有…...

cuda编程学习——基础知识介绍!干货向(三)
本文主要内容为介绍CUDA编程前的一些基础知识 参考资料: 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 文章、讲解视频同步更新公众《AI知识物语》,B站:出门吃三碗饭 1:并行计算 并行程序可以分为 指令并行࿱…...

30 VueComponent 事件的绑定
前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 用例如下, 我们这里核心关注 事件的处理流程 问题的调试 整个…...
作用域及作用域链
作用域 隔离变量的集合 作用域最大的用处就是隔离变量,不同作用域内的同名变量不会有命名冲突。 作用域类型 全局作用域,函数作用域和块级作用域。 1)全局作用域,在整个代码文件中都可以访问的作用域。 2)函数作用域…...

深入解析Linux C/C++ 编程中的内存泄漏问题
深入解析Linux C/C 编程中的内存泄漏问题 I. 前言 (Introduction)1.1 文章目的与内容概述 (Purpose and Overview of the Content)1.2 重要性和实用性的说明 (Significance and Practicality Explanation)1.3 数据结构与内存泄漏的基本概念 (Basic Concepts of Data Structure …...
【爬虫第三章】 Python基础
预计更新一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3…...

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【阿里云】阿里云OSS对象存储— 开通OSS服务、搭建OSS环境、快速入门
目录 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 2. 创建文件夹上传图片 3. RAM 访问控制 三、快速入门 1.下载SDK 2.创建存储空间[可选] 3.上传图片 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 选择 Bucket列表,进行Bucket创建…...
代理对象Proxy是什么
Proxy是ES6(ECMAScript 2015)引入的一个特性,它是一种用于创建代理对象的构造函数。代理对象可以用来拦截并自定义对目标对象的操作。 通过使用Proxy,您可以在目标对象上设置各种拦截器(称为"陷阱"…...

会话跟踪cookie和session
什么是会话跟踪技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可能包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法,服务器需…...

ACS Cent. Sci 2018 | 数据驱动的分子连续表征的自动化学设计
原文标题:Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules 代码:https://github.com/aspuru-guzik-group/chemical_vae 原文链接:https://pubs.acs.org/doi/10.1021/acscentsci.7b00572 Automatic…...

安卓Termux搭建web服务器【公网远程手机Android服务器】
文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序,用于在 Android 手机上搭建一个完整的Linux 环境,能够实现Linux下的许多基本操作,不需要root权限Termux就…...

【大数据之Hive】二、Hive安装
Hive安装部署(最小化部署) 安装部署Hive(最小化只用于本机测试环境中,不可用于生产环境),并运行。 步骤: (1)把apache-hive-3.1.3-bin.tar.gz解压到/opt/module/目录下&…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...