python - 如何在json中返回传递的变量url参数
问题描述
我有一个烧瓶应用程序。我希望它将通过 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)
当点击 url http://127.0.0.1:2700/generate 我在 outfile 中得到的输出是
[{"process_name": "favicon.ico", "process_id": "82daa01c-bb2d-444c-9b44-a8880200cb2a"}]
这里应该生成“process_name”作为在 URL 参数中传递的内容。但我得到了 favicon.ico
解决方案
网络浏览器导致了这种情况。您应该尝试使用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)
Web 浏览器正在执行此操作。您正在使用 Web 浏览器向 Flask 开发服务器发出请求。根据您的代码设置方式,文件data.txt确实接收到正确的输出 - 但该输出几乎立即被覆盖,因为 Web 浏览器自动向服务器发送请求以获取网页的 favicon。基于 Webkit / Blink 的网络浏览器执行此操作。
这是我在 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 请求。它不像一个在幕后做一些事情的网络浏览器。
如果您使用 wget 进行测试,您的data.txt文件如下所示:
[{"process_id": "30423bad-7640-441e-b608-f77f4420d07e", "process_name": "cat"}]
您的 Web 浏览器正在发送对该页面的 favicon 的请求,因为它认为这是一个正常的网页。
推荐阅读
- authentication - P4 登录命令会抛出这样的消息 - 尝试获取锁定 /homedir/.p4tickets.lck 的次数过多。我该如何解决这个问题?
- python - python - asn1 将文本解析为 json
- javascript - React 应用程序尝试绑定到视图时出错
- python - 我想将数据集的形状从 (N, 512) 更改为 (N, 16, 32)
- java - 搜索按钮从其他 JFrame 中的表中选择数据
- terraform - 是否可以使用 Terraform 将新的侦听器、后端地址池和请求路由规则添加到现有的 Azure 应用程序网关?
- java - 我如何 Jsoup 查询 html 键/值对的值
- javascript - 在 JS 中操作按钮的链接
- java - 在 Java 11 上安装 tomcat 7 作为服务:NB:JAVA_HOME 应该指向 JDK 而不是 JRE
- python - 如何在 WXPYTHON 中向我的面板显示图像