我有一个Flask应用。我希望它将通过URL端点传递的变量参数写入输出文件。
我尝试将其写入外文件,但URL端点中传递的名称未打印在外文件中。请提出建议的方式,以便在传递变量端点时可以动态更改输出文件
from flask import Flask, jsonify
import json
import uuid
app = Flask(__name__)
@app.route('/<string:name>')
def get_stats(name):
proceuudi = uuid.uuid4()
stat = [
{
'process_id': str(proceuudi),
'process_name': 'name'
}
]
with open('data.txt', 'w+') as f: # writing JSON object
json.dump(stat, f)
return jsonify({'stats':stat})
app.run(port = 8500)
点击网址http://127.0.0.1:2700/generate时 我在输出文件中得到的输出是
[{"process_name": "favicon.ico", "process_id": "82daa01c-bb2d-444c-9b44-a8880200cb2a"}]
此处,“ process_name”应按URL参数传递来生成。但是我正在获取favicon.ico
答案 0 :(得分:0)
Web浏览器正在引起此问题。您应该尝试使用 pdb 并设置跟踪,如下所示:
from flask import Flask, jsonify
import json
import uuid
import pdb
app = Flask(__name__)
@app.route('/<string:name>')
def get_stats(name):
proceuudi = uuid.uuid4()
stat = [
{
'process_id': str(proceuudi),
'process_name': name
}
]
with open('data.txt', 'w+') as f: # writing JSON object
pdb.set_trace()
json.dump(stat, f)
return jsonify({'stats':stat})
app.run(port = 8500)
网络浏览器正在执行此操作。您正在使用网络浏览器向Flask开发服务器发出请求。设置代码的方式中,文件 data.txt 确实会收到正确的输出-但该输出几乎立即被覆盖,因为Web浏览器会自动向服务器发送请求以获取用于网页。基于Webkit / Blink的Web浏览器可以做到这一点。
这是当我在Web浏览器(Chrome)中向服务器发出请求时命令行的输出。我正在做的是访问链接:http://127.0.0.1:8500/cat
但是,我的网络浏览器也会自动 请求该网页的收藏夹图标。
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8500/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Apr/2019 22:15:14] "GET /cat HTTP/1.1" 200 -
127.0.0.1 - - [02/Apr/2019 22:15:14] "GET /favicon.ico HTTP/1.1" 200 -
看到第二个请求?对“ favicon.ico”的第二个GET请求?我的网络浏览器会自动执行该操作。这是网络浏览器试图自动抓取小图标以显示在此网页的网络浏览器的选项卡菜单栏中。尝试使用诸如 wget 之类的命令行程序向您的服务器发出HTTP请求。您可以在命令行中尝试类似的操作(例如,在Linux上):
wget http://127.0.0.1:8500/cat
我们使用像wget这样的命令行程序,因为它只会严格发送您告诉它的HTTP请求。它不像Web浏览器那样在幕后做一些事情。
如果使用wget进行测试,则您的 data.txt 文件如下所示:
[{"process_id": "30423bad-7640-441e-b608-f77f4420d07e", "process_name": "cat"}]
您的网络浏览器正在发送此页面图标的请求,因为它认为它是正常的网页。