【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,一经查实,立即删除!

相关文章

python图形化编程pygame游戏模块

文章目录: 一:语句使用模板 基本框架 1.安装Pygame 2.创建一个主窗口display 3.图像渲染与动画 4.鼠标事件mouse 5.声音和音乐sound 6.设置屏幕背景颜色fill 7.添加文字font 8.绘制图形draw 8.1 绘制多边形polygon 8.2 绘制直线line 8.3 绘…

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

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

LM studio使用gemmar聊天小试

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

C++ GUI库FLTK的基本使用

文章目录 1. Ubuntu下FLTK编译和使用2. Windows下FLTK编译使用 1. Ubuntu下FLTK编译和使用 编译源码 安装依赖 sudo apt install libx11-dev sudo apt install cmake make编译 # 进入源码目录fltk-1.3.9 mkdir build cd build cmake .. make库文件位于build/lib中 准备头文件#…

【如何关闭Windows自动更新的6种方法】

关闭Windows自动更新的6种方法 1. 前言2. 方法1:使用本地组策略编辑器(适用于Windows 10 Pro和Enterprise版本)3. 方法2:使用注册表编辑器4. 方法3:服务管理5. 方法4:使用控制面板(仅适用于Wind…

【Golang星辰图】Go语言驾驭物联网:探索MQTT、CoAP、GPIO、串口、TLS和UDP的实现

打通物联网通信路:Go语言实现MQTT、CoAP、GPIO、串口、TLS和UDP协议详解 前言 物联网(IoT)的快速发展给设备间的通信提出了新的需求。本文将介绍使用Go语言实现物联网常用通信协议的相关库,包括MQTT、CoAP、GPIO、串口、TLS和UD…

服务器时间不准确的风险

1.误导系统记录:服务器时间不准确会误导系统记录文件的创建时间,导致文件的顺序发生变化。这对于需要按照时间顺序处理文件的系统来说,可能会引发严重的问题。 2.影响任务执行:对于有时间依赖的任务,服务器时间不准确会…

[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"; …

C++11 新特性:常量表达式 constexpr(上)

C11 引入了constexpr关键字,用于定义常量表达式,从而使变量获得在编译阶段即可计算出结果的能力,提高运行时的效率。 constexpr 的使用分两篇文章介绍,今天这篇文章主要讲解什么是常量表达式和 constexpr 典型使用场景的前三种用…

分布式事务的解决方案--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的平台设计与实现项目系统开发资源(可…

linux安装mysql8.x

检查卸载mysql 1.查看当前安装mysql情况,查找以前是否装有mysql [rootmaster01 /]# rpm -qa|grep -i mysql mysql-libs-5.1.73-8.el6_8.x86_642.执行命令删除安装的MySQL [rootmaster01 /]# rpm -ev mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps3.查看之前安装的MySQ…

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

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

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

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

6-181 统计无向图的连通分量

要求实现函数,能够统计并返回无向图(顶点数不超过100)的连通分量(极大连通子图)数,可增加自定义函数或借助STL(标准模板库)之queue(队列)。无向图采用邻接矩阵存储,输入的顶点从1开始编号,但顶点下标从0开始使用。 函数接口定义: int CountSubGraph(int mat[][N…

C++提高笔记(六)---STL函数对象、STL常用算法(遍历、查找)

1、STL-函数对象 1.1函数对象 1.1.1函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质:函数对象(仿函数)是一个类,不是一个…

linux常用指令

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

C语言经典面试题目(十九)

1、什么是C语言?简要介绍一下其历史和特点。 C语言是一种通用的高级计算机编程语言,最初由贝尔实验室的Dennis Ritchie在1972年至1973年间设计和实现。C语言被广泛应用于系统编程、应用程序开发、嵌入式系统和操作系统等领域。它具有高效、灵活、可移植…