FLASK with socketio:如果在套接字连接期间从本地脚本收到 post 请求,则显示模板
FLASK with socketio: Displaying a template if a post request is received from local script during a socket connection
因此,我有一个本地脚本,它应该输出一条特定的消息以显示给连接到 Flask 应用程序中的用户的客户端。
从本地脚本到我使用的服务器:
import requests
requests.post(address, json=json)
并且消息已正确接收到服务器。问题是我无法通过客户端显示它,因为做了类似的事情:
from flask import render_template, url_for, redirect, request
@app.route('/home', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
result = request.json
return render_template('home.html', result=result, title='Homepage', current_user=current_user)
没有有效地呈现任何模板。
我怀疑这是由于套接字连接的性质所致,所以我可能应该使用 sockets events
.
设置类似的体系结构
问题是我希望在主路线上为每个用户显示一条唯一的消息,但我担心使用套接字无法做到这一点。
请原谅我对我的问题的错误解释,我仍然是 Flask 网络和 Web 开发方面的新手。
解决了,比想象中容易。我最终使用 socket events
而不是 http。这是服务器端和客户端的代码(针对可能有类似情况的其他人进行了简化)。
唯一糟糕的是无法使用 jinja2 来显示网页中的元素。但是我解决了一些(坏的)js。
服务器端:
@app.route('/home', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
result = request.json
socketio.emit('my_socket_event',
result,
broadcast=True #use broadcast=True if you want the message to be displayed to all connected clients
)
客户端:
<script>
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('my_socket_event',function(result) {
console.log('[EVENT CALLED] my_socket_event')
for (var elem in result) {
let htmlFrag = "<p>" + elem + "</p>"
$('.container').append(htmlFrag);
}
})
</script>
因此,我有一个本地脚本,它应该输出一条特定的消息以显示给连接到 Flask 应用程序中的用户的客户端。 从本地脚本到我使用的服务器:
import requests
requests.post(address, json=json)
并且消息已正确接收到服务器。问题是我无法通过客户端显示它,因为做了类似的事情:
from flask import render_template, url_for, redirect, request
@app.route('/home', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
result = request.json
return render_template('home.html', result=result, title='Homepage', current_user=current_user)
没有有效地呈现任何模板。
我怀疑这是由于套接字连接的性质所致,所以我可能应该使用 sockets events
.
问题是我希望在主路线上为每个用户显示一条唯一的消息,但我担心使用套接字无法做到这一点。
请原谅我对我的问题的错误解释,我仍然是 Flask 网络和 Web 开发方面的新手。
解决了,比想象中容易。我最终使用 socket events
而不是 http。这是服务器端和客户端的代码(针对可能有类似情况的其他人进行了简化)。
唯一糟糕的是无法使用 jinja2 来显示网页中的元素。但是我解决了一些(坏的)js。
服务器端:
@app.route('/home', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
result = request.json
socketio.emit('my_socket_event',
result,
broadcast=True #use broadcast=True if you want the message to be displayed to all connected clients
)
客户端:
<script>
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('my_socket_event',function(result) {
console.log('[EVENT CALLED] my_socket_event')
for (var elem in result) {
let htmlFrag = "<p>" + elem + "</p>"
$('.container').append(htmlFrag);
}
})
</script>