Bru*_*iro 6 python flask python-requests
我正在尝试运行一个简单的 Flask API,但它没有按预期工作。我在 Python 方面不是很有经验,所以发现错误并解决它非常具有挑战性。如果有人可以提供帮助,我将不胜感激。
系统设置如下:
这些是要求:
$ pip freeze
ansimarkup==1.4.0
asn1crypto==0.24.0
better-exceptions-fork==0.2.1.post6
certifi==2019.3.9
cffi==1.12.3
chardet==3.0.4
Click==7.0
colorama==0.4.1
cryptography==2.7
Flask==1.0.3
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.1
loguru==0.2.5
MarkupSafe==1.1.1
pycparser==2.19
Pygments==2.4.2
pyOpenSSL==19.0.0
PySocks==1.7.0
requests==2.22.0
six==1.12.0
urllib3==1.24.2
Werkzeug==0.15.4
Run Code Online (Sandbox Code Playgroud)
我的项目结构是这样的:
??? statsapi
? ??? data_store.py
??? app.py
??? client.py
??? requirements.txt
Run Code Online (Sandbox Code Playgroud)
这是 app.py 代码:
??? statsapi
? ??? data_store.py
??? app.py
??? client.py
??? requirements.txt
Run Code Online (Sandbox Code Playgroud)
data_store.py 代码:
#!/usr/bin/env python
from flask import Flask, request, jsonify
from loguru import logger
from statsapi import data_store
app = Flask(__name__)
# Creating an endpoint
@app.route("/data", methods=["POST"])
def save_data():
# setting log for this action
logger.info(f"Saving data...")
# transform content requisition to json
content = request.get_json()
# save in a module just the "data" field
# The uuid of the data
uuid = data_store.save(content["data"])
# set log for las action
logger.info(f"Data saved with UUID `{uuid}` successfully")
# define information to be returned
return jsonify({"status": "success",
"message": "data saved successfully",
"uuid": uuid})
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Run Code Online (Sandbox Code Playgroud)
和 client.py 代码:
#!/usr/bin/env python
from uuid import uuid4
# Create a dictionary to keep things in memory
_in_memory_storage = dict()
# Save received data in memory giving an uuid
def save(data):
data_uuid = uuid4()
_in_memory_storage[data_uuid] = data
return data_uuid
Run Code Online (Sandbox Code Playgroud)
client.py 应该向 API 发送一些数据,但是在调用时它会返回以下长错误消息:
#!/usr/bin/env python
import requests
def send(data):
response = requests.post("http://localhost:5000/data", json={"data": data})
print(response.json())
def main():
send([1, 2, 3, 4])
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
正如我所说,我离成为一名 Python 专家还很遥远,所以我将非常感谢任何帮助。
小智 0
我认为这可能是您的端口已经由其他应用程序提供服务,请尝试更改烧瓶端口。
\n我在本地使用了你的代码并成功
\n尝试这样的事情
\nmain.py
import data_store\nfrom flask import Flask, request, jsonify\n\napp = Flask(__name__)\n\n\n# Creating an endpoint\n@app.route("/data", methods=["POST"])\ndef save_data():\n # setting log for this action\n print(f"Saving data...")\n\n # transform content requisition to json\n content = request.get_json()\n\n # save in a module just the "data" field\n # The uuid of the data\n uuid = data_store.save(content["data"])\n\n # set log for las action\n print(f"Data saved with UUID `{uuid}` successfully")\n\n # define information to be returned\n return jsonify({"status": "success",\n "message": "data saved successfully",\n "uuid": uuid})\n\n\nif __name__ == "__main__":\n app.run(port=8000)\n
Run Code Online (Sandbox Code Playgroud)\ndata_store.py
from uuid import uuid4\n\n\n# Create a dictionary to keep things in memory\n_in_memory_storage = dict()\n\n\n# Save received data in memory giving an uuid\ndef save(data):\n data_uuid = uuid4()\n\n _in_memory_storage[data_uuid] = data\n\n print(f"Cached value => {_in_memory_storage}")\n\n return data_uuid\n
Run Code Online (Sandbox Code Playgroud)\nclient.py
import requests\n\n\ndef send(data):\n response = requests.post("http://localhost:8000/data", json={"data": data})\n\n print(response.json())\n\n\ndef main():\n send([1, 2, 3, 4])\n\n\nif __name__ == "__main__":\n main()\n
Run Code Online (Sandbox Code Playgroud)\n当它像这样测试成功时
\n\xe2\x86\x92 python client.py\n{'message': 'data saved successfully', 'status': 'success', 'uuid': '050b02c2-e67e-44f7-b6c9-450106d8b40e'}\n
Run Code Online (Sandbox Code Playgroud)\n烧瓶记录器
\n\xe2\x86\x92 python main.py\n * Serving Flask app "main" (lazy loading)\n * Environment: production\n WARNING: This is a development server. Do not use it in a production deployment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)\nSaving data...\nCached value => {UUID('050b02c2-e67e-44f7-b6c9-450106d8b40e'): [1, 2, 3, 4]}\nData saved with UUID `050b02c2-e67e-44f7-b6c9-450106d8b40e` successfully\n127.0.0.1 - - [06/Jun/2021 12:51:35] "POST /data HTTP/1.1" 200 -\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
5169 次 |
最近记录: |