如何在发送消息时更新另一个客户端而不刷新页面 - python Flask

问题描述 投票:0回答:1
@views.route('/send-msg/<int:id>', methods=['GET', 'POST'])
@login_required
def send_msg(id):
    if request.method == 'POST':
        message = request.form.get('message')
        if len(message) < 1:
            flash('Message is too short!', category='error')
        else:
            new_message = Message(data=message, 
            sender_id=current_user.id, receiver_id=id)
            db.session.add(new_message)
            db.session.commit()
            flash('Message sent!', category='success')
    return render_template("message_sender.html", 
           user=current_user, to_contact=Contact.query.get(id),)

我希望上面的代码向另一个客户端发送消息以立即更新他的页面,而无需刷新页面(就像whatsapp web的工作方式)

python html flask
1个回答
0
投票
from flask import render_template, request, flash 
from flask_login import login_required, current_user 
from .models import Message, Contact 
from . import db from . import socketio
    
    @socketio.on('message') def handle_message(data):
        # Broadcast the received message to all clients
        message = data['message']
        sender_id = data['sender_id']
        receiver_id = data['receiver_id']
        
        new_message = Message(data=message, sender_id=sender_id, receiver_id=receiver_id)
        db.session.add(new_message)
        db.session.commit()
        
        # Emit the message to all clients except the sender
        socketio.emit('message', {'message': message, 'sender_id': sender_id}, room=receiver_id)
    
    @views.route('/send-msg/<int:id>', methods=['GET', 'POST']) @login_required def send_msg(id):
        if request.method == 'POST':
            message = request.form.get('message')
            if len(message) < 1:
                flash('Message is too short!', category='error')
            else:
                # Emit the message to the server using WebSocket
                socketio.emit('message', {'message': message, 'sender_id': current_user.id, 'receiver_id': id})
                flash('Message sent!', category='success')
        return render_template("message_sender.html", user=current_user, to_contact=Contact.query.get(id))

确保配置您的 Flask 应用程序以使用 Flask-SocketIO。您需要初始化 SocketIO 对象并将其与 Flask 应用程序一起运行。具体方法如下:

from flask import Flask
from flask_socketio import SocketIO
from . import views

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

socketio = SocketIO(app)
socketio.init_app(app)

if __name__ == '__main__':
    socketio.run(app)

最后,在 HTML 模板 (message_sender.html) 中,您需要包含 SocketIO JavaScript 库并通过 WebSocket 处理发送和接收消息。

© www.soinside.com 2019 - 2024. All rights reserved.