使用Flask.Request的方法和属性,获取get和post请求参数(二)

1、Flask中的request

在Python发送Post、Get等请求时,我们使用到requests库。Flask中有一个request库,有其特有的一些方法和属性,注意跟requests不是同一个。

2、Post请求:request.get_data()

用于服务端获取客户端请求数据。注意:是未经任何处理的原始数据而不管内容类型,如果数据时json的,则取得是json字符串,排序和请求参数一致。

2.1 Flask代码

不同方法的示例仅需要更换视图函数,后续仅展示视图函数。

# 注意:flask中的request和requests库不是同一个,要区分开
from flask import Flask, request# 创建一个flask实例
app = Flask(__name__)# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():# 获取未经处理过的原始数据而不管内容类型,如果数据格式是json的# 则取得是json字符串,排序和请求参数一致data = request.get_data()print(data)print(type(data))return 'hello world'if __name__ == '__main__':app.run()

2.2 测试代码(一直应用于后续章节,不再赘述)

import requestsdata = {"username": "cc","password": "123456"
}url = "http://127.0.0.1:5000/"
resp = requests.post(url=url, json=data)
print('post:', resp)
print('post:', resp.text)resp = requests.get(url=url, params=data)
print('get:', resp)
print('get:', resp.text)

2.3 执行效果

2.3.1 Flask

get.data()获取到的请求数据是字节流,排序和请求参数一致。
在这里插入图片描述

2.3.2 请求结果

get和post请求都成功了。
在这里插入图片描述

3、Post请求:request.data

获取到的也是未经处理的原始数据,如果数据格式是json的,则取得是json字符串,排序和请求参数一致。request.get_data()效果一样

4、Post请求:request.get_json()

将请求参数做了处理,得到字典格式,因此排序会打乱,依据字典排序规则

4.1 Flask代码

# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():# 将请求参数做了处理,得到字典格式,因此排序会打乱,依据字典排序规则。data = request.get_json()print(data)print(type(data))# 服务端就可以根据字典进行取值username = request.get_json()["username"]print(username)return 'hello world'

4.2 执行效果

4.2.1 Flask

将请求参数做了处理,得到字典格式,方便服务端按键取值,提取到username是“cc”。

注意:get请求是没有字典的,不能够取值,运行时可以注释掉get方法。
在这里插入图片描述

4.2.2 请求结果

post请求成功。
在这里插入图片描述

5、Post请求:request.json

跟request.get_json()效果相同。得到的是字典格式的,因此排序会打乱,依据字典排序规则。

代码如下:

# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():# 将请求参数做了处理,得到的是字典格式的,因此排序会打乱,依据字典排序规则data = request.jsonprint(data)print(type(data))# 如果这里的key服务端写错了,客户端请求时,就会出现500username = request.json['username']print(username)return 'hello world'

6、Get请求:request.args.get()

6.1 Flask代码

# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():# 可以获取单个的值username = request.args.get("username")print(username)return 'hello world'

6.2 执行结果

服务端拿到了username的值“cc”
在这里插入图片描述

7、Get请求:request.args.to_dict()

7.1 Flask代码

# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():# 可以获取get请求的所有参数,返回值是ImmutableMutiDict(不可变的多字典)类型i = request.argsprint(i)# 将获得的参数转化成字典j =  i.to_dict()print(j)print(type(j))print(j["username"])return 'hello world'

7.2 执行结果

在这里插入图片描述

8、模拟请求报错

8.1 500 Internal Server Error

当服务端key写错时,就会报500错误,例如可以把key username改成usename,运行后看下效果。
在这里插入图片描述在这里插入图片描述

8.2 404 Not Found

仅创建了实例,并没有视图函数,启动socket服务后,访问地址就会报404。或者请求url填写错误。

from flask import Flask# 创建一个flask实例
app = Flask(__name__)if __name__ == '__main__':app.run()

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

理解ConcurrentSkipListMap(有点类似于并发的TreeMap)

是一个分层的结构。 从最上面开始查找,最后层层往下查。 插入和删除有可能会引起节点Level的变更。 key是有序的,因此可以看做是并发的TreeMap

ubuntu18.04下配置muduoC++11环境

1.安装muduo依赖的编译工具及库 Cmake sudo apt-get install cmakeBoost sudo apt-get install libboost-dev libboost-test-devcurl、c-ares DNS、google protobuf sudo apt-get install libcurl4-openssl-dev libc-ares-dev sudo apt-get install protobuf-compiler libp…

带你了解SpringBoot支持的复杂参数--自定义对象参数-自动封装

😀前言 本篇博文是关于SpringBoot 在响应客户端请求时支持的复杂参数和自定义对象参数,希望您能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章…

【Github】SourceTree技巧汇总

sourceTree登录github账户 会跳转到浏览器端 按照Git Flow 初始化仓库分支 克隆远程仓库到本地 推送变更到远程仓库 合并分支 可以看到目前的本地分支(main、iOS_JS)和远程分支(origin/main、origin/HEAD、origin/iOS_JS)目前所处…

14_基于Flink将pulsar数据写入到HBase

3.7.基于Flink将数据写入到HBase 3.7.1.编写Flink完成数据写入到Hbase操作, 完成数据备份, 便于后续进行即席查询和离线分析 3.7.1.1.HBase基本介绍 hbase是基于Google发布bigTable论文产生一款软件, 是一款noSQL型数据, 不支持SQL. 不支持join的操作, 没有表关系, 不支持事…

链表OJ详解

💕人生不满百,常怀千岁忧💕 作者:Mylvzi 文章主要内容:链表oj详解 题目一:移除元素 题目要求: 画图分析: 代码实现: struct ListNode* removeElements(struct List…

基于chatgpt动手实现一个ai_translator

动手实现一个ai翻译 前言 最近在极客时间学习《AI 大模型应用开发实战营》,自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator,在这里简单记录下开发过程和心得体会,供有兴趣的同学参考; ai翻译程序 版本迭代 在学习…

Synchronized八锁

/** * Description: 8 锁 * 1 标准访问,先打印短信还是邮件 ------sendSMS ------sendEmail 2 停 4 秒在短信方法内,先打印短信还是邮件 ------sendSMS ------sendEmail 3 新增普通的 hello 方法,是先打短信还是 hello ------getHello ------…

Idea中使用statement接口对象,显示mysql版本号,所有库和表名

使用statement 接口对象,进行以下操作: 显示数据库版本号显示所有库显示所有库中的table表 显示数据库版本号: public class StatementDemo {Testvoid showall(){try{Statement st conn.createStatement();ResultSet rs st.executeQuery(…

pytest fixture 常用参数

fixture 常用的参数 参数一:autouse,作用:自动运行,无需调用 举例一:我们在类中定义一个function 范围的fixture; 设置它自动执行autouseTrue,那么我们看下它执行结果 输出: 说明:…

Leetcode-每日一题【剑指 Offer 12. 矩阵中的路径】

题目 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如,在下面的 34 的矩阵中包含单词 "ABCCED"(单词中的字母…

CUDA执行模型

一、CUDA执行模型概述 二、线程束执行 1. 线程束与线程块 线程束是SM中基本的执行单元。 当一个线程块的网格被启动后,网格中的线程块分布在SM中。 一旦线程块被调度到一个SM中,线程块中的线程会被进一步划分成线程束。 一个线程束由32个连续的线程…

基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

什么是媒体代发布?媒体代发布注意事项

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体代发布是指将新闻稿或其他宣传内容委托给专业的媒体代理机构或公司进行发布和推广的活动。这些机构通常拥有丰富的媒体资源、人脉和经验,能够更好地将信息传递给目标受众…

C语言 指针与内存之间的关系

一、内存与字节 一个内存单元一个字节一个地址 整型 int 类型中int类型的字节数是4 且一个字节表示八个bite位 一个二进制数位有着32个bite 所以又可以表示为:一个字节 8个比特位 32位数的二进制数位的八分之一 例如: int a 10; 该表达式…

项目实战 — 消息队列(9){编写demo程序}

消息队列服务器核心功能就是,提供了虚拟主机,交换机, 队列,消息等概念的管理,实现三种典型的消息转发方式,可以实现跨主机/服务器之间的生产者消费模型。 这里,就编写一个demo,实现…

JAVA多线程和并发基础面试问答(翻译)

JAVA多线程和并发基础面试问答(翻译) java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序…

苏州OV泛域名RSA加密算法https

RSA加密算法是一种非对称加密算法,它被广泛应用于信息安全领域。与对称加密算法不同,RSA加密算法使用了两个密钥,一个公钥和一个私钥。公钥可以公开,任何人都可以使用它加密信息,但只有私钥的持有者才能解密信息。RSA加…

php如何对接伪原创api

在了解伪原创api的各种应用形态之后,我们继续探讨智能写作背后的核心技术。需要说明的是,智能写作和自然语言生成、自然语言理解、知识图谱、多模算法等各类人工智能算法都有紧密的关联,在百度的智能写作实践中,常根据实际需求将多…

全球劳动力革命,Papaya Global 打破薪资界限

员工需求和劳动力结构的进一步变化,只会增加对更加自动化和全面的全球薪资解决方案的需求。 远程工作潮流与全球劳动力的蓬勃发展,使得企业在全球范围内,寻找最优秀的人才成为可能。然而,随之而来的复杂薪资管理挑战,也…