Flask(7)- request 对象(下)

简介: Flask(7)- request 对象(下)

postman 发起请求的结果


/addUser

image.png

/addUser2

控制台输出

form = ImmutableMultiDict([('name', 'poloyy'), ('age', '12')])

args = ImmutableMultiDict([])

用 args 属性的话得到是一个空字典哦

 

/addUser3

控制台输出

form = ImmutableMultiDict([('name', 'poloyy'), ('age', '12')])

json = None

用 json 属性的话得到是一个 None 哦,所以无论如何都不要用 json 获取 form-data 哟!

 

/addUser4

image.png

可以看到 values 属性也能拿到 form 表单提交的数据哦

 

获取 Json 数据的栗子


代码

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/7/11 1:47 下午
# file: 5_request_form.py
"""
from flask import Flask, request
app = Flask(__name__)
@app.route('/addJson', methods=['POST'])
def check_login():
    return {"name": request.json['name'], "age": request.json['age']}
@app.route('/addJson2', methods=['POST'])
def check_login2():
    print('json =', request.json)
    print('args =', request.args)
    return "good"
@app.route('/addJson3', methods=['POST'])
def check_login3():
    print('json =', request.json)
    print('form =', request.form)
    return "good"
@app.route('/addJson4', methods=['POST'])
def check_login4():
    print('json =', request.json, type(request.json))
    print('values =', request.values)
    return {"name": request.json['name'], "age": request.json['age']}
if __name__ == '__main__': app.run(debug=True)


  • 下面我会用 postman 统一通过 raw-json,就是 Json 格式的请求体来传数据
  • 在 Flask 里面,把四种获取请求数据的属性都写一遍,然后看看最后的结果,提前帮大家踩坑

 

postman 发起请求的结果


/addJson

image.png

/addJson2

json = {'age': '12', 'name': 'poloyy'}

args = ImmutableMultiDict([])

用 args 属性的话得到是一个空字典哦

 

/addJson3

json = {'age': '12', 'name': 'poloyy'}

form = ImmutableMultiDict([])

用 form 属性的话得到是一个空字典哦

 

/addJson4

image.png

这里要注意的是,当你的请求体是 Json 时,是不能通过 values 来获取请求数据哦!!

最后来看看 request.json 会返回什么吧

json = {'age': '12', 'name': 'poloyy'} <class'dict'>

request.json 拿到的就是 Json 格式的请求体,并且自动转换成字典了哦!

 

为什么 requests.values 能获取 form、args 的数据,但是拿不到 json 的数据呢?


request.values 源码

image.png

  • 能看到,它本质就是获取 args、form 的数据,但不包含 json 数据
  • 但是这里有个重点,只有你的请求方法不为 GET 的时候,发送 form 表单数据才能通过 request.values 拿到请求数据
  • 来试试是不是真的这样

 

代码

@app.route('/query4', methods=["GET", "POST"])
def query4():
    print(request.form)
    print(request.args)
    print(request.values)
    return {"name": request.values['name'], "age": request.values['age']}


postman 发起 GET 请求,form-data 传数据

image.png

直接报错,找不到对应的 name key,因为 request.values 是空的

 

控制台输出

ImmutableMultiDict([('name', 'poloyy'), ('age', '12')])

CombinedMultiDict([ImmutableMultiDict([])])

ImmutableMultiDict([])

很明显,request.form 是能拿到数据的,但是 request.value 是拿不到数据哦

 

postman 发起 POST 请求,form-data 传数据

image.png

这次就能正常显示返回值啦

 

控制台输出

ImmutableMultiDict([('name', 'poloyy'), ('age', '12')])
ImmutableMultiDict([])
CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('name', 'poloyy'), ('age', '12')])])


看源码应该知道,当非 GET 请求的时候传递表单数据,request.values 也能获取得到 request.form 的数据


相关文章
|
6月前
|
JSON 前端开发 数据安全/隐私保护
通过一个form表单的渲染演示,Flask的request,重定向语法
通过一个form表单的渲染演示,Flask的request,重定向语法
52 0
通过一个form表单的渲染演示,Flask的request,重定向语法
|
5月前
|
JSON API 数据格式
如何使用Flask request对象处理请求
在 Flask 中,request对象是处理 HTTP 请求的重要工具之一。它提供了许多属性和方法,可以帮助我们获取请求的相关信息和数据。本文将向你介绍request对象的常用方法以及如何在 Flask 应用程序中使用它。
110 3
|
存储 JavaScript 前端开发
使用 Flask 的g对象和 MySQL 实现用户登录和注销功能
使用 Flask 的g对象和 MySQL 实现用户登录和注销功能
|
编解码 Python
Flask request
Flask request
105 0
Flask request
|
XML JSON 前端开发
Flask request请求对象
Flask request请求对象
|
JSON 数据格式 Python
Flask(7)- request 对象(上)
Flask(7)- request 对象(上)
148 0
Flask(7)- request 对象(上)
|
前端开发 Python
小白学Flask第五天 | 详解很重要的request对象
小白学Flask第五天 | 详解很重要的request对象
202 0
小白学Flask第五天 | 详解很重要的request对象
|
11天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
38 2
|
20天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
25 2
|
22天前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
27 1