社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用python flask读取多个文件[重复]

python_interest • 5 年前 • 2369 次点击  

我想能够将数据发送到我的烧瓶应用程序。我试过进入 request.data 但它是一个空字符串。如何访问请求数据?

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    data = request.data  # data is empty
    # need posted data here

这个问题的答案使我问 Get raw POST body in Python Flask regardless of Content-Type header 接下来,是获取原始数据,而不是解析的数据。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38056
 
2369 次点击  
文章 [ 16 ]  |  最新文章 5 年前
aakash gupta
Reply   •   1 楼
aakash gupta    6 年前
from flask import Flask, request, jsonify

@app.route('/added', methods=['POST'])
def add():
    data = request.get_json(force=True)
    l = {'name': data['name']}
    lingual.append(l)

    return jsonify({'lang': lingual})
Ravin Gupta
Reply   •   2 楼
Ravin Gupta    6 年前
from flask import request

content = request.get_json()
name = content.get('name', '')

如果请求类型为json,则获取数据,您还可以同时提到默认参数。

from flask import request

content = request.form
name = content.get('name', '')

获取请求类型窗体的数据

from flask import request

request.args.get("name", "")

使用GET请求从URL获取参数

freezed
Reply   •   3 楼
freezed    6 年前

对于像我这样忘记了HTML的人,请确定 <input> 在你的 <form> 有一个 name="" 属性!

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    print("Posted data : {}".format(request.form))

    return """
<form method="post">
    <input type="text">
    <input type="text" id="idtxt2">
    <input type="text" name="txt3" id="idtxt3">  
    <input type="submit" Value="Hopla!">
</form>
"""

if __name__ == "__main__":
    app.run()

控制台上的结果:

freezed@machine % python3 run.py
 * Serving Flask app "flaskstuff.views" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 268-634-781
127.0.0.1 - - [20/Aug/2018 16:52:59] "POST / HTTP/1.1" 200 -
Posted data : ImmutableMultiDict([('txt3', 'text 3')])

名称属性 = 没有数据 在里面 ImmutableMultiDict([]) !

Syscall
Reply   •   4 楼
Syscall    7 年前

在javascript中:

var value_data = [1,2,3,4];

$.ajax({
        type: 'POST',
        url: '/',
        data:JSON.stringify(value_data),
        success: function (response) {
            alert("Data added successfully");
         },    
});

在python中:

client_data = request.get_data()
Paul Gowder
Reply   •   5 楼
Paul Gowder    6 年前

这是一种获取所有请求数据的恶意黑客,不管它是如何发送的,但我认真地使用了:

def get_request_info():
    args = str(request.args)
    form = str(request.form)
    files = str(request.files)
    maybe_json = request.get_json(silent=True, cache=False)
    if maybe_json:
        thejson = json.dumps(maybe_json)
    else:
        thejson = "no json"
    return # whatever you want 

然后我返回一个连接这些命令的字符串,或者,如果我觉得有必要,我跳过字符串调用/json dump并合并所有的dict。然后,可以将其记录下来,在一个视图函数中返回,无论它包含什么,您实际上都可以看到整个请求。

Zavec
Reply   •   6 楼
Zavec    6 年前

如果可以识别mime类型,则两者都可以 request.data request.get_data() 将返回空字符串。

不管怎样,要获取完整的内容,您需要打电话 request.get_data(as_text=True) .

http://flask.pocoo.org/docs/1.0/api/#flask.Request.get_data

Daniel
Reply   •   7 楼
Daniel    6 年前
length = request.headers["Content-Length"]
data=request.stream.read()

现在,数据是请求主体

ivanleoncz
Reply   •   8 楼
ivanleoncz    7 年前

使用 request.form .

而不是获取单个表单数据( request.form["field_name"] ,您可以通过分析 ImmutableDict 由提供 申请表 对象,如下所示:

烧瓶(路线)

@app.route('/data', methods=['POST'])                                           
def f_data():                                                                   
    if request.method == "POST":
        fields = [k for k in request.form]                                      
        values = [request.form[k] for k in request.form]
        data = dict(zip(fields, values))
    return jsonify(data) 

壳牌

$ curl http://127.0.0.1:5000/data -d "name=ivanleoncz&role=Software Developer"
{
  "name": "ivanleoncz", 
  "role": "Software Developer"
}

有关详细信息,请参阅 Gist .

zhangqy
Reply   •   9 楼
zhangqy    7 年前

简单来说,您可以通过以下方式获取数据:

@app.before_request
def before_request():
    g.data = request.get_json() or request.values

现在, g.data 是的一个实例 werkzeug.ImmutableMultiDict . 然后你可以用 G.数据 它可以满足您的大部分需求。例如,您可以这样使用它:

@app.route("/something", methods=["POST"])
def do_something():
    result = handle(g.data)
    return jsonify(data=result)

当然,你可以用 blueprint 而不是 app ~~

Tarik Fojnica
Reply   •   10 楼
Tarik Fojnica    7 年前
@app.route('/', methods=['POST'])
def process_data():
    req_data = request.get_json(force=True) # force=True will make sure this works even if a client does not specify application/json
    language = req_data['language'] # or whatever key you have in your json

    return '''The language value is: {}'''.format(language)
Xiao
Reply   •   11 楼
Xiao    9 年前

如果不管内容类型如何,都希望使用原始日志正文,则应使用 request.get_data() ,因为 request.form 已转换为 werkzeug.ImmutableMultiDict 格式。

Jochem Schulenklopper Amit Kar
Reply   •   12 楼
Jochem Schulenklopper Amit Kar    7 年前

Flask还有另一个JSON的快捷方式:

标题:

{Content-Type: application/json}

@app.route("/something", methods=["POST"])
def do_something():
    data = request.get_json()
kaushal agrawal Little Roys
Reply   •   13 楼
kaushal agrawal Little Roys    7 年前

我举了一个完整的例子 应用程序/JSON :

from flask import Flask, abort, request 
import json

app = Flask(__name__)


@app.route('/foo', methods=['POST']) 
def foo():
    if not request.json:
        abort(400)
    print request.json
    return json.dumps(request.json)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

使用 Postman 对于POST请求:

enter image description here

使用 卷曲 命令:

curl -i -H "Content-Type: application/json" -X POST -d '{"userId":"1", "username": "fizz bizz"}' http://localhost:5000/foo

附笔。 对于URL查询参数示例,您可以在中看到我的答案 Multiple parameters in in Flask approute

Fizer Khan
Reply   •   14 楼
Fizer Khan    10 年前

简单如下

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

search = request.args.get("search")
page = request.args.get("page")

为了 表单输入 使用 申请表

email = request.form.get('email')
password = request.form.get('password')

对于 数据类型应用程序/json 使用 请求数据

# data in string format and you have to parse into dictionary
data = request.data
dataDict = json.loads(data)
clyfish
Reply   •   15 楼
clyfish    13 年前
from flask import request
request.data
davidism SilentGhost
Reply   •   16 楼
davidism SilentGhost    7 年前

这个 docs 描述请求中可用的属性。在最常见的情况下 request.data 将为空,因为它用作回退:

请求数据 以字符串形式包含传入的请求数据,以防它附带的mimetype flask无法处理。

  • request.args :URL查询字符串中的键/值对
  • request.form :正文中的键/值对,来自HTML Post表单或不是JSON编码的JavaScript请求。
  • request.files :瓶身上的文件,烧瓶与 form . HTML表单必须使用 enctype=multipart/form-data 否则文件将无法上载。
  • request.values :组合 args 形式 ,首选 阿尔茨海默病 如果键重叠

所有这些都是 MultiDict 实例。您可以使用以下方法访问值:

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