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

1、Flask中的request

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

2、Post请求:request.get_data()

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

2.1 Flask代码

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

python 复制代码
# 注意: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 测试代码(一直应用于后续章节,不再赘述)

python 复制代码
import requests

data = {
    "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代码

python 复制代码
# 视图函数,只允许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()效果相同。得到的是字典格式的,因此排序会打乱,依据字典排序规则。

代码如下:

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

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

6.1 Flask代码

python 复制代码
# 视图函数,只允许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代码

python 复制代码
# 视图函数,只允许get和post请求
@app.route('/', methods=['GET', 'POST'])
def request_flask():
	# 可以获取get请求的所有参数,返回值是ImmutableMutiDict(不可变的多字典)类型
    i = request.args
    print(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填写错误。

python 复制代码
from flask import Flask

# 创建一个flask实例
app = Flask(__name__)

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


相关推荐
smallYoung几秒前
学习笔记-python基础(day12 正则表达式)
后端
Zane19942 分钟前
volatile / synchronized / final:三大特性(原子性/可见性/有序性)到底谁保证了什么?
java·后端
网易云信8 分钟前
销售为什么是企业 AI 落地的"最佳突破口"?
人工智能·后端·agent
名字还没想好☜9 分钟前
Spring @Async 不生效排查:自调用失效、默认线程池坑与异步方法里的异常去哪了
java·python·spring·异步
Alan_7518 分钟前
文件下载中文文件名乱码终极方案
后端
枫叶V20 分钟前
请求可以重试,业务只能生效一次:我们的幂等架构实践
后端
忘路之远近i21 分钟前
受够阿里云自带终端后,我用 Cursor + grill-me 做了个运维面板
服务器·开发语言·人工智能·python·阿里云·云计算
Ai拆代码的曹操22 分钟前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操24 分钟前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
程序员包打听29 分钟前
从 npx 到 moonx,moonbit 的野心与展望
前端·后端