Python 获取烧瓶请求中接收的数据

Python 获取烧瓶请求中接收的数据,python,flask,werkzeug,Python,Flask,Werkzeug,我希望能够将数据发送到我的Flask应用程序。我尝试访问request.data,但它是一个空字符串。如何访问请求数据 来自flask导入请求 @app.route('/',方法=['GET','POST']) def parse_请求(): data=request.data#数据为空 #需要在这里发布数据吗 这个问题的答案让我提出了下一个问题,即获取原始数据而不是解析数据。要获取原始数据,请使用。只有当它不能被解析为表单数据时,这才有效,否则它将为空,并且请求。表单将拥有解析后的数据 f

我希望能够将数据发送到我的Flask应用程序。我尝试访问
request.data
,但它是一个空字符串。如何访问请求数据

来自flask导入请求
@app.route('/',方法=['GET','POST'])
def parse_请求():
data=request.data#数据为空
#需要在这里发布数据吗

这个问题的答案让我提出了下一个问题,即获取原始数据而不是解析数据。

要获取原始数据,请使用。只有当它不能被解析为表单数据时,这才有效,否则它将为空,并且
请求。表单
将拥有解析后的数据

from flask import request
request.data
描述请求中可用的属性。在大多数常见情况下,
request.data
将为空,因为它被用作回退:

request.data
以字符串形式包含传入请求数据,以防mimetype Flask无法处理

  • :URL查询字符串中的键/值对
  • :正文中的键/值对,来自HTML post表单或非JSON编码的JavaScript请求
  • :正文中的文件,它与
    表单
    分开。HTML表单必须使用
    enctype=multipart/form data
    ,否则将不会上载文件
  • :组合了
    args
    form
    ,如果键重叠,则首选
    args
  • :解析的JSON数据。请求必须具有
    应用程序/json
    内容类型,或用于忽略内容类型
所有这些都是实例(除了
json
)。您可以使用以下方式访问值:

  • request.form['name']
    :如果知道密钥存在,请使用索引
  • request.form.get('name')
    :如果密钥可能不存在,请使用
    get
  • request.form.getlist('name')
    :如果密钥被多次发送,并且您想要一个值列表,请使用
    getlist
    get
    仅返回第一个值

对于URL查询参数,请使用
request.args

search = request.args.get("search")
page = request.args.get("page")
对于已发布的表单输入,请使用
request.form

email = request.form.get('email')
password = request.form.get('password')
@app.route('/', methods=['GET', 'POST'])
def index():
    print(request.form)
    return """
<form method="post">
    <input type="text">
    <input type="text" id="txt2">
    <input type="text" name="txt3" id="txt3">  
    <input type="submit">
</form>
"""
对于内容类型为
application/JSON
的JSON,请使用


如果发布内容类型为
application/JSON
的JSON,请使用
request.get_JSON()
将其放入Flask中。如果内容类型不正确,则返回
None
。如果数据不是JSON,则会引发错误

@app.route("/something", methods=["POST"])
def do_something():
    data = request.get_json()

要获取原始文章正文而不考虑内容类型,请使用
request.get_data()
。如果您使用
request.data
,它将调用
request.get_data(parse_form_data=True)
,这将填充
请求.form
MultiDict
并将
数据保持为空。

原始数据作为
request.stream
从WSGI服务器传递到Flask应用程序。流的长度在
内容长度
标题中

length = request.headers["Content-Length"]
data = request.stream.read(length)

通常使用
request.get_data()
更安全。

下面是一个解析发布的JSON数据并将其返回的示例

从烧瓶导入烧瓶,请求,jsonify
app=烧瓶(名称)
@app.route('/foo',methods=['POST'])
def foo():
data=request.json
返回jsonify(数据)
要使用curl发布JSON,请执行以下操作:

curl-i-H“内容类型:application/json”-X POST-d'{“userId”:“1”,“username”:“fizz bizz”}http://localhost:5000/foo
或使用邮递员:


要解析JSON,请使用
request.get_JSON()


要在不使用
应用程序/JSON
内容类型的情况下发布JSON,请使用
request.get_JSON(force=True)


要在JavaScript中使用jQuery发布JSON,请使用
JSON.stringify
转储数据,并将内容类型设置为
application/JSON

@app.route("/something", methods=["POST"])
def do_something():
    result = handle(request.get_json())
    return jsonify(data=result)
var值_数据=[1,2,3,4];
$.ajax({
键入:“POST”,
url:“/process”,
数据:JSON.stringify(value_data),
contentType:'应用程序/json',
成功:功能(响应数据){
警惕(“成功”);
}   
});
使用
请求在Flask中解析它。获取json()

data=request.get_json()

要将
request.form
作为普通字典,请使用
request.form.To_dict(flat=False)

要返回API的JSON数据,请将其传递到
jsonify

本例将表单数据作为JSON数据返回

data = request.get_json()
name = data.get('name', '')
@app.route('/form_to_json',methods=['POST']))
def form_to_json():
数据=请求.表单.到目录(平面=假)
返回jsonify(数据)
下面是一个带有curl的POST表单数据示例,返回为JSON:

$curlhttp://127.0.0.1:5000/data -d“名称=ivanleoncz&角色=软件开发人员”
{
“姓名”:“ivanleoncz”,
“角色”:“软件开发人员”
}

使用HTML表单发布表单数据时,请确保
输入
标记具有
名称
属性,否则它们不会出现在
请求.表单中

email = request.form.get('email')
password = request.form.get('password')
@app.route('/', methods=['GET', 'POST'])
def index():
    print(request.form)
    return """
<form method="post">
    <input type="text">
    <input type="text" id="txt2">
    <input type="text" name="txt3" id="txt3">  
    <input type="submit">
</form>
"""

只有
txt3
输入具有
名称
,因此它是
request.form

中唯一存在的键。如果内容类型被识别为表单数据,
request.data
将解析为
request.form
,并返回空字符串

email = request.form.get('email')
password = request.form.get('password')
@app.route('/', methods=['GET', 'POST'])
def index():
    print(request.form)
    return """
<form method="post">
    <input type="text">
    <input type="text" id="txt2">
    <input type="text" name="txt3" id="txt3">  
    <input type="submit">
</form>
"""

要获取原始数据而不考虑内容类型,请调用
request.data
调用
get\u data(parse\u form\u data=True)
,如果直接调用,则默认值为
False

如果主体被识别为表单数据,则它将位于
request.form
中。如果是JSON,它将位于
request.get_JSON()
中。否则,原始数据将位于
请求.数据中。如果您不确定如何提交数据,可以使用
链获取第一个包含数据的数据

def get_request_data():
返回(
request.args
或请求
获取json(force=True,silent=True)
或请求.data
)
request.arg
@app.route('/addData', methods=['POST'])
def add_data():
     data_in = mongo.db.Data
     id = request.values.get("id")
     name = request.values.get("name")
     newuser = {'id' : id, 'name' : name}
     if voter.find({'id' : id, 'name' : name}).count() > 0:
            return "Data Exists"
     else:
            data_in.insert(newuser)
            return "Data Added"
@app.route('/process_data', methods=['POST'])
def process_data():
   req_data = request.get_json(force=True)
from flask import json

@ app.route('/slack/request_handler', methods=['POST'])
def request_handler():
   req_data = json.loads(request.form["payload"])
request.data
from flask import request
name = request.args.get("name")
age = request.args.get("age")
name = request.form.get('name')
age = request.form.get('age')
name = request.form['name']
age = request.form['age']
data = request.get_json()