Python使用flask框架与前端建立websocket链接,并进行数据交互

Python使用flask框架与前端建立websocket链接,并进行数据交互

后端采用的框架为flask,前端用的flask自带的html编写,实现的功能为:前后端建立websocket链接并进行数据交互

一、编写一个flask后端服务

常规创建方式就可以,创建一个flask服务。声明一个websocket实例,以websocket的方式启动这个服务。

  1. 安装相关依赖:
pip install flask
pip install flask_socketio
  1. 声明应用和websocket实例
from flask import Flask, request, render_template
from flask_socketio import SocketIO, emit

# 声明应用
app = Flask(__name__)

# 为通讯添加一个密钥
app.config['SECRET_KEY'] = 'secret_key'

# 创建websocket实例
my_socket = SocketIO(app)

  1. 项目目录下新建temlpates文件夹,然后文件夹里新建index.html文件,内容信息,我们稍后补充,先有这个东西就行。
    在这里插入图片描述
  2. 编写接口信息。编写接口信息的时候要添加websocket通讯的相关方法。

# 声明访问页面信息
@app.route('/')
def index():
	# 这里是进行了flask前端模板的渲染,文件就是我们上面建的那个,只写文件名称就可以,框架内部是默认访问temlpates目录的
    return render_template('index.html')

新建一个websocket推送接口,使用 emit() 方法推送信息到到前端。然后声明几个websocket建立过程中用到的方法。关于 emit() 的使用,后面讲。

# 数据推送接口,后面调这个接口模拟数据发送
@app.route('/send_msg', methods=['post'])
def receive_source():
    """
    推送数据
    :return:
    """
    try:
        my_socket.emit('date', request.json, namespace='/')
        return 'success'
    except Exception as e:
        log.error(f'数据处理错误:{
     str(e)}')
        return 'failed'

# 当websocket链接建立的时候,会调用这个
@my_socket.on('connect')
def handle_connect():
    print('WebSocket 链接已经建立')

# 关闭用
@my_socket.on('disconnect')
def handle_disconnect():
    print('WebSocket 链接已经关闭')

# 发送信息用
@my_socket.on('message')
def handle_message(data):
    emit('msg', data, namespace='/')

  1. 以websocket的方式启动服务(填写完后面的html代码后启动)
if __name__ 
  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Python+Flask websocket 和 vue 的实时聊天项目-毕业设计源码+使用文档(高分优秀项目) 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试,下载即用,确保可以运行,部署教程齐全,也可以作为课程设计 基于Python+Flask websocket 和 vue 的实时聊天项目-毕业设计源码+使用文档(高分优秀项目) 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试,下载即用,确保可以运行,部署教程齐全,也可以作为课程设计 基于Python+Flask websocket 和 vue 的实时聊天项目-毕业设计源码+使用文档(高分优秀项目) 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试,下载即用,确保可以运行,部署教程齐全,也可以作为课程设计 基于Python+Flask websocket 和 vue 的实时聊天项目-毕业设计源码+使用文档(高分优秀项目) 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试,下载即用,确保可以运行,部署教程齐全,也可以作为课程设计 基于Python+Flask websocket 和 vue 的实时聊天项目-毕业设计源码+使用文档(高分优秀项目) 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到97分,在window10/11测试环境严格调试,下载即用,确保可以运行,部署教程齐全,也可以作为课程设计
好的,针对您的问题,我可以提供以下两种方法: 1. 使用AJAX请求 可以在前端(html)中使用JavaScript发起AJAX请求,向后台(Flask)发送请求并获取响应。具体实现方式如下: 前端(html)代码: ```html <button onclick="sendMsg()">发送</button> <div id="response"></div> <script> function sendMsg() { var msg = document.getElementById("msg").value; var xhr = new XMLHttpRequest(); xhr.open("POST", "/api", true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { document.getElementById("response").innerHTML = xhr.responseText; } }; xhr.send(JSON.stringify({"msg": msg})); } </script> ``` 后台(Flask)代码: ```python from flask import Flask, request app = Flask(__name__) @app.route('/api', methods=['POST']) def api(): data = request.json msg = data.get('msg') # 获取前端传来的消息 # 处理消息并返回响应 return "Hello, " + msg if __name__ == '__main__': app.run() ``` 2. 使用WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。使用WebSocket可以实现实时的双向通信。具体实现方式如下: 前端(html)代码: ```html <button onclick="sendMsg()">发送</button> <div id="response"></div> <script> var socket = new WebSocket("ws://localhost:5000/ws"); socket.onmessage = function(event) { document.getElementById("response").innerHTML = event.data; }; function sendMsg() { var msg = document.getElementById("msg").value; socket.send(msg); } </script> ``` 后台(Flask)代码: ```python from flask import Flask, request from flask_sockets import Sockets app = Flask(__name__) sockets = Sockets(app) @sockets.route('/ws') def ws(ws): while not ws.closed: msg = ws.receive() # 获取前端传来的消息 # 处理消息并返回响应 ws.send("Hello, " + msg) if __name__ == '__main__': from gevent import pywsgi from geventwebsocket.handler import WebSocketHandler server = pywsgi.WSGIServer(('localhost', 5000), app, handler_class=WebSocketHandler) server.serve_forever() ``` 以上就是两种使用Flask后台与前端(html)交互的方法。您可以根据具体需求选择合适的方式进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值