我有一个网址
http://127.0.0.1:5000/feed/arm1?camera_id=1&command=update&value=3
。
我还有另一个网址
http://127.0.0.1:5000/wait/arm1
当我请求第一个URL时,我想获取第二个URL的参数。 我该怎么办?
答案 0 :(得分:0)
根据您的澄清,以下是答复
/feed/<entity>
收到的数据持久保存到数据库中/wait/<entity>
从该数据库中检索数据由于您只请求服务器端,因此我没有提供适当的JavaScript代码或任何可对调用/wait
的客户端进行轮询的内容,而是使用了meta http-equiv="refresh"
。该代码出于简洁起见也使用了records -您也可以只写一个文件或提出另一个持久化数据的想法。这只是一个例子。
事不宜迟,这是代码(下面的解释-我省略了文档字符串以保持简洁):
from flask import Flask, request
from records import Database
app = Flask(__name__)
def db():
return Database('sqlite:///camera_commands.sqlite')
@app.route('/feed/<entity>')
def feed(entity):
args = ['camera_id', 'command', 'value']
result = db().query('INSERT INTO commands (entity, camera_id, command, value) '
'VALUES (:entity, :camera_id, :command, :value)',
entity=entity,
camera_id=int(request.args.get('camera_id')),
command=request.args.get('command'),
value=int(request.args.get('value')))
return 'OK'
@app.route('/wait/<entity>')
def wait(entity):
result = db().query('SELECT * FROM commands WHERE entity = :entity ORDER BY id DESC LIMIT 1', entity=entity)
output = result.export('json')
return f"""\
<!DOCTYPE html>
<html>
<head>
<title>Wait</title>
<meta http-equiv="refresh" content="1"/>
</head>
<body>
<pre>{output}</pre>
</body>
</html>
"""
def setup_db(db):
db.query('DROP TABLE IF EXISTS commands')
db.query('CREATE TABLE commands (id INTEGER PRIMARY KEY, entity TEXT, camera_id INTEGER, command TEXT, value INTEGER)')
if __name__ == '__main__':
setup_db(db())
app.run()
app
。db
函数返回到本地sqlite数据库的新数据库连接(如果文件camera_commands.sqlite
不存在,则会创建该文件)。feed
函数将参数/feed/<entity>
存储在数据库中,并返回OK
。注意我在这里如何使用准备好的语句!wait
函数检索最新命令并将其返回到一个简单的html网站中,该网站每秒都会重新加载自身。setup_db
函数清除sqlite文件并创建表。运行程序时,在浏览器中打开http://127.0.0.1:5000/wait/arm1(以及可选的http://127.0.0.1:5000/wait/arm2)。现在致电例如
http://127.0.0.1:5000/feed/arm1?camera_id=1&command=update&value=3 要么 http://127.0.0.1:5000/feed/arm1?camera_id=1&command=start&value=1 等
当/ wait / arm2保持沉默时,带有/ wait / arm1的浏览器选项卡将接收更新。当您更改Feed的目标时,例如更改为http://127.0.0.1:5000/feed/arm2?camera_id=1&command=update&value=5,/ wait / arm1不会更改,但/ wait / arm2会更改。
当然,所有这些还没有充实,但是应该为您提供有关如何将数据持久存储在服务器上并在客户端上进行轮询的足够的想法。