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