首页 > 编程问答 >将 JSON 发送到 Flask,request.args 与 request.form

将 JSON 发送到 Flask,request.args 与 request.form

时间:2024-07-29 09:12:20浏览次数:10  
标签:python json rest flask post

我的理解是, request.args Flask 中包含来自 GET 请求的 URL 编码参数,而 request.form 包含 POST 数据。我很难理解为什么在发送 POST 请求时,尝试使用 request.form 访问数据会返回 400 错误,但是当我尝试使用 request.args 访问它时,它似乎工作正常.

我尝试使用 Postman curl 发送请求,结果是相同的。

curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"

代码:

@app.route('/testpoint', methods = ['POST'])
def testpoint():
    name = request.args.get('name', '')
    return jsonify(name = name)

对于 request.args request.form 的理解是正确的,但遇到问题的原因在于正在发送 JSON 数据,而不是表单数据。

  • request.args: 用于从 URL 查询字符串中获取数据,例如 http://example.com/?name=John
  • request.form: 用于从编码为表单数据的 POST 请求中获取数据,例如 name=John&age=30

当发送 JSON 数据时,Flask 将其视为请求正文,而不是表单数据。 因此, request.form 将为空。

要访问 JSON 数据,需要使用 request.get_json() 方法:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/testpoint', methods = ['POST'])
def testpoint():
    data = request.get_json()
    name = data.get('name', '') 
    return jsonify(name=name)

if __name__ == '__main__':
    app.run(debug=True, port=8080)

解释:

  1. request.get_json() : 此方法解析请求正文中的 JSON 数据,并将其作为 Python 字典返回。
  2. data.get('name', '') : 从解析的 JSON 数据中获取 name 键的值。 如果 name 键不存在,则返回空字符串。

使用 curl 发送 JSON 数据:

curl -X POST -H "Content-Type: application/json" \
     -d '{"name":"Joe"}' \
     http://127.0.0.1:8080/testpoint

注意: 确保在发送 JSON 数据时,设置 Content-Type 标头为 application/json ,以便 Flask 正确解析数据。

标签:python,json,rest,flask,post
From: 23326368

相关文章

  • 【Python学习手册(第四版)】学习笔记06-Python动态类型-赋值模型详解
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。主要介绍Python的动态类型(也就是Python自动为跟踪对象的类型,不需要在脚本中编写声明语句),Python中变量和对象是如何通过引用关联,垃圾收集的概念,对象共享引用是如何影响多个变量......
  • Django REST Framework(十四)路由Routes
    如何在DjangoRESTframework中利用SimpleRouter和DefaultRouter来高效生成视图集的路由信息,并详细解释如何使用action装饰器为视图集中的自定义方法生成路由1.1使用Routers创建router对象并注册视图集在创建router对象并注册视图集时,我们会定义一个视图集并注册到ro......
  • Python学习手册(第四版)】学习笔记09.3-Python对象类型-分类、引用VS拷贝VS深拷贝、比较
    个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。这部分稍杂,视需要选择目录读取。主要讲的是对之前的所有对象类型作复习,以通俗易懂、由浅入深的方式进行介绍,所有对象类型共有的特性(例如,共享引用),引用、拷贝、深拷贝,以及比较、......
  • 同时运行多个Python文件
    如何同时运行python的多个文件我有三个文件pop.pypop1.pypop2.py我想同时运行这个文件这些文件正在被一一运行python代码运行所有文件可以使用以下几种方法同时运行多个Python文件:1.使用多线程/多进程:多线程(threading):如果的Pytho......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-56- 多文件上传 - 下篇
    1.简介前边的两篇文章中,宏哥分别对input控件上传文件和非input控件上传文件进行了从理论到实践地讲解和介绍,但是后来又有人提出疑问,前边讲解和介绍的都是上传一个文件,如果上传多个文件,Playwright是如何实现的呢?宏哥看了一下官方的API也有上传多个文件的API,那么今天就来讲解和介绍......
  • 如何使用python模块捕获用户的文本输入
    我正在开发一个项目,它会检测到如果您按“(”,它会自动关闭它“[”和“{”的情况相同,但重点是它检测键盘按钮“{”或“[”不是字符,这意味着如果朋友有不同的方式输入“[”,它将无法工作,因为该程序用于检测“altgr+(”序列,这可能会影响不同语言的键盘因为您不想在按下......
  • 如何更新 numpy 2 的 python 模块?
    在带有pip的Linux上,新的numpy2似乎可以很好地与pandas配合使用:$python3-c'importnumpyasnp;print(np.__version__);importpandasaspd;print(pd.__version__)'2.0.12.2.2但是,在带有miniconda的Windows上,我得到$${localappdata}/miniconda3/en......
  • python BioChemist 数据集的数据字典/描述
    我正在使用生物化学家数据集。我在哪里可以找到包含每个变量描述的“数据字典”?这就是我正在查看的:importpandasaspdfrompydatasetimportdatadata('bioChemists')我已经用谷歌搜索并尝试寻找运算符,但没有运气!pydataset软件包不包含生物化学家数据集的描述......
  • python中的Telebot API不断断开连接
    使用远程机器人,不断断开服务。我暂时让它在发生这种情况时重新启动。下面是我的代码和错误:importrandomimporttelebotfromtelebot.typesimportInlineKeyboardMarkup,InlineKeyboardButtonfromthreadingimportTimer,Eventfromdotenvimportload_dotenvimporto......
  • 如何用Python制作Android服务?
    我想构建一个简单的Android应用程序,例如PushOver应用程序,它具有TCP服务器并接收其记录的文本消息,然后将其作为推送通知发送。这部分已经完成并且工作正常。但即使GUI应用程序关闭,我也想接收消息。我知道这是可能的,因为PushOver应用程序做到了!我想,我可能需要一......