【python】flask框架的生命周期,多种查询参数的获取方式

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学
景天的主页:景天科技苑

文章目录

  • flask的生命周期
  • request请求对象
  • 获取请求中各项数据
  • 单个参数值获取
  • 多个参数值获取

flask的生命周期

整个htpp请求在flask框架中的流程如下:

客户端—>wsgi应用程序->全局钩子–> 路由 --> 视图 --> 路由—> 全局钩子 —> wsgi应用程序—> 客户端
在这里插入图片描述

request请求对象

文档: https://flask.palletsprojects.com/en/2.0.x/api/#flask.Request

  • request:flask中代表当前请求的 request 对象
  • 作用:在视图函数中取出本次客户端的请求数据
  • 导入:from flask import request
  • 源代码位置:
  • ​ 代理类 from flask.app import Request —> from flask.globals.Request
  • ​ 源码类:from flask.wrappers.Request
  • ​ 基类:from werkzeug.wrappers import Request as RequestBase

request,常用的属性如下:
注意,request对象要在视图函数里面使用
在这里插入图片描述

获取请求中各项数据

from flask import Flask, request
# 项目实例应用对象
app = Flask(__name__)# 加载配置
app.config.update({"DEBUG": True
})# 在http的常用请求方法中,delete和get是没有请求体的!!!@app.route(rule="/")
def index():"""获取请求体"""print(request)return 'hello flask'if __name__ == '__main__':app.run(host="0.0.0.0", port=5000)

浏览器访问,终端打印request对象
在这里插入图片描述

单个参数值获取

url中每个查询参数只有一个值的情况:

from flask import Flask, request
# 项目实例应用对象
app = Flask(__name__)# 加载配置
app.config.update({"DEBUG": True
})# 在http的常用请求方法中,delete和get是没有请求体的!!!@app.route(rule="/qs")
def index():"""获取客户端请求的查询字符串参数:return:""""""请求url:http://127.0.0.1:5000/qs?user=xiaoming&age=16"""# 获取原始的查询字符串参数,格式:bytesprint(request.query_string)# b'user=xiaoming&age=16'# # 针对原始的查询字符串参数,转换成字典格式# query_string = parse_qs(request.query_string.decode())# print(query_string)  # {'user': ['xiaoming'], 'age': ['16']}# # 获取参数值# print(query_string["user"][0])# # 获取查询字符串参数,格式:ImmutableMultiDict# print(request.args)# # ImmutableMultiDict([('user', 'xiaoming'), ('age', '16')])# # 获取单个参数值# print(request.args["user"])# print(request.args["age"])# print(request.args.get("age"))# """# 请求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap# """# # print(request.args["user"]) # 'xiaoming'# # print(request.args["fav"])  # 'shopping'# # print(request.args.get("user")) # 'xiaoming'## print(request.args.getlist("fav"))  # ['shopping', 'coding', 'rap']#return "hello, flask"if __name__ == '__main__':app.run(host="0.0.0.0", port=5000)

浏览器请求:
在这里插入图片描述

request.query_string 查询参数,是byte类型数据
在这里插入图片描述

针对原始的查询字符串参数,默认是byte类型,我们可以将其转换成字典格式
需要导包:

from urllib.parse import parse_qs# # 针对原始的查询字符串参数,转换成字典格式query_string = parse_qs(request.query_string.decode())print(query_string)  # {'user': ['xiaoming'], 'age': ['16']}

注意,得到的字典值是列表类型
在这里插入图片描述

# # 获取参数值
print(query_string["user"][0])

在这里插入图片描述

request.args是ImmutableMultiDict类型数据
在这里插入图片描述

# # 获取单个参数值
print(request.args["user"])
print(request.args["age"])
print(request.args.get("age"))

在这里插入图片描述

多个参数值获取

url中查询参数有多个值的情况:

#多个参数值获取
# """
# 请求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap
# """print(request.args)
print(request.args["user"]) # 'xiaoming'
#通过字典键的方式获取多参数值,只能获取第一个
print(request.args["fav"])  # 'shopping'
print(request.args.get("user")) # 'xiaoming'#使用getlist()方式,可以获取全部
print(request.args.getlist("fav"))  # ['shopping', 'coding', 'rap']

浏览器请求:
在这里插入图片描述

终端打印
在这里插入图片描述

完整获取查询参数代码

from flask import Flask, request
from urllib.parse import parse_qs# 项目实例应用对象
app = Flask(__name__)# 加载配置
app.config.update({"DEBUG": True
})# 在http的常用请求方法中,delete和get是没有请求体的!!!@app.route(rule="/qs")
def index():"""获取客户端请求的查询字符串参数:return:""""""请求url:http://127.0.0.1:5000/qs?user=xiaoming&age=16"""# 获取原始的查询字符串参数,格式:bytes# print(request.query_string)# b'user=xiaoming&age=16'# 获取查询字符串参数,格式:ImmutableMultiDict# print(request.args)# # 针对原始的查询字符串参数,转换成字典格式# query_string = parse_qs(request.query_string.decode())# print(query_string)  # {'user': ['xiaoming'], 'age': ['16']}# # 获取参数值# print(query_string["user"][0])# # 获取查询字符串参数,格式:ImmutableMultiDict# print(request.args)# # ImmutableMultiDict([('user', 'xiaoming'), ('age', '16')])# # 获取单个参数值# print(request.args["user"])# print(request.args["age"])# print(request.args.get("age"))#多个参数值获取# """# 请求url:http://127.0.0.1:5000/qs?user=xiaoming&fav=shopping&fav=coding&fav=rap# """print(request.args)print(request.args["user"]) # 'xiaoming'#通过字典键的方式获取多参数值,只能获取第一个print(request.args["fav"])  # 'shopping'print(request.args.get("user")) # 'xiaoming'#使用getlist()方式,可以获取全部print(request.args.getlist("fav"))  # ['shopping', 'coding', 'rap']return "hello, flask"if __name__ == '__main__':app.run(host="0.0.0.0", port=5000)

总结:如上就是flask框中,各种情况下查询参数的获取方式,感兴趣的朋友一键三连,持续更新中!!!

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

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

相关文章

探索编程迷宫:选择你的职业赛道

在现代科技的浪潮中,程序员的职业赛道就像是一座迷宫,充满着前端的美丽花园,后端的黑暗洞穴,以及数据科学的神秘密室。这个迷宫中,每一条通道都充满了挑战和机遇,而每一个行走其中的人都在寻找着属于自己的…

LM studio使用gemmar聊天小试

通过LM studio可以方便的使用各种模型,使用LM提供的chat界面或者是使用python代码。 试试代码 在windows下使用python简单一试,例子直接复制LM界面上的代码: 用pip安装 openai包在LM界面 Start Server 需要安装 openai包。 本地电脑是I7…

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步,非实时,实现最终的一致性。 四、分布式事务的解决方案

Stable Diffusion WebUI 生成参数:宽度/高度/生成批次/每批数量/提示词相关性/随机种子

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文将继续了解 Stable Diffusion WebUI 的生成参数,主要内容有:宽度、高度、生成批次、每批数量、提示词相关性、随机种子。希望能对你…

Visual Studio 2022下配置 OpenMP 多线程编程环境与运行

目录 一创建项目时选择“创建新项目 -> 空项目 -> 下一步 -> 创建” 二右键“源文件 -> 添加 -> 新建项 -> 添加” 三配置 1. 测试程序: 最开始的时候错误很多: 2.将 “ include "stdafx.h" ” 删掉,添加 “…

电影院售票网站|基于SSM框架+ Mysql+Java+ B/S结构的电影院售票网站设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

操作系统知识-存储管理+文件管理管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记,未经本人许可,请勿转载,如发现本笔记内容的错误还望各位不吝赐教(笔记内容可能有误怕产生错误引导)。 本章的主要内容见下图: 1、存储管理&#…

【算法与数据结构】二叉树(前中后)序遍历

文章目录 📝前言🌠 创建简单二叉树🌉二叉树的三种遍历🌠前序🌉中序遍历 🌠后序遍历 🌠二叉树节点个数🌉二叉树节点个数注意点 🚩总结 📝前言 一棵二叉树是结…

linux常用指令

前言 大家好我是jiantaoyab,这篇文章给大家介绍Linux下常用的命令。 指令的本质也是Linux上的一些程序。 cd cd - 回到最近从哪来的路径 cd ~ 当前用户对应的工作目录(普通用户:/home/xx root用户:/root) cd / 去…

【vscode】vscode重命名变量后多了很多空白行

这种情况,一般出现在重新安装 vscode 后出现。 原因大概率是语言服务器没设置好或设置对。 以 Python 为例,到设置里搜索 "python.languageServer",将 Python 的语言服务器设置为 Pylance 即可。

【数据可视化】Echarts官方文档及常用组件

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. Echarts官方文档介绍3. ECharts基础架构及常用术语3.1 ECharts的基础架构3.2 ECharts的常用术语3.2.1 ECharts的基本名词3.2.2 ECharts的图表名词 4. 直角坐标系下的网格及坐标轴4.1 直角坐标系下的网格4.2…

C++的语法

可能需要用到存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等) 下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。 注意:不同系统会有所差异 #inc…

诺视科技完成亿元Pre-A2轮融资,加速Micro-LED微显示芯片商业化落地

近日,Micro-LED微显示芯片研发商诺视科技(苏州)有限公司(以下简称“诺视科技”)宣布完成亿元Pre-A2轮融资,本轮融资由力合资本领投,老股东盛景嘉成、汕韩基金以及九合创投持续加码,这…

【漏洞复现】北京新网医讯技术有限公司云端客服管理系统存在SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

python模块

模块导入方式 模块需要在使用前进行导入 语法:[from 模块名] import [ 模块 | 类 | 函数 | *] [ as 别名 ] * 代表全部将该模块全部导入 from 模块名 import 功能名 #导入时间模块中的sleep方法 from time import sleep 注意:from可以省略 直接…

掘根宝典之C++正向迭代器和反向迭代器详解

简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式,使程序员可以对容器中的元素进行逐个访问和操作,而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器,这迭代器的名字就叫容器迭代器 迭代器的作用类…

java Flink(四十二)Flink的序列化以及TypeInformation介绍(源码分析)

Flink的TypeInformation以及序列化 TypeInformation主要作用是为了在 Flink系统内有效地对数据结构类型进行管理,能够在分布式计算过程中对数据的类型进行管理和推断。同时基于对数据的类型信息管理,Flink内部对数据存储也进行了相应的性能优化。 Flin…

C++ 11

目录 1. 统一的列表初始化 1.1 {}初始化 1.2 std::initializer_list 2. decltype 3. 右值引用和移动语义 3.1 左值引用和右值引用 3.2 左值引用与右值引用比较 3.3 右值引用使用场景和意义 3.4 右值引用引用左值及其一些更深入的使用场景分析 3…

[论文笔记] Gradient Surgery for Multi-Task Learning

【强化学习 137】PCGrad - 知乎 多任务学习(multi task):任务权重、loss均衡、梯度下降那点事 - 知乎 ICLR 2020 rejected submission:Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020. mul…