使用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()


相关推荐
Dilee4 分钟前
Spring AI 2.0.0 接 Skill 最小 Demo:SkillsTool 加载 SKILL.md 一次跑通
后端
zoulee246 分钟前
doris-python:让 SQLAlchemy 玩转 Apache Doris 多驱动生态
后端
RainCity6 分钟前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
Csvn43 分钟前
Linux 系统性能监控与瓶颈排查
后端
铁皮饭盒1 小时前
Rust版Bun1.4之前, 盘点Bun1.3新特性
前端·javascript·后端
kfaino8 小时前
码农的AI翻身(五)你好,我叫 Transformer
后端·aigc
Oneslide14 小时前
机械革命 单系统纯净重装Ubuntu(全盘覆盖,清空原有Windows)
后端
GetcharZp14 小时前
告别OOM!用Go+libvips实现30000×50000超大图片的流式瓦片服务
后端·go