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>