Django+Vue WebSocket实战:实时显示后端任务执行进度
15 浏览量
更新于2024-08-28
收藏 128KB PDF 举报
本文将介绍如何使用Django和Vue.js框架来实现WebSocket连接,以便在前端页面上实时显示后端任务的执行情况。通过WebSocket,可以实现双向通信,确保前端能够即时获取到后端的任务更新。
### Django后端实现
在Django中,我们依赖于`Django Channels`库来处理WebSocket连接。首先,确保安装了必要的软件包:
```bash
pip install channels==2.2.0
pip install channels-redis==2.4.0
```
在`settings.py`中,我们需要将`channels`添加到`INSTALLED_APPS`列表中,并配置`CHANNEL_LAYERS`以使用Redis作为中间件:
```python
INSTALLED_APPS = [
# ...
'channels',
]
# Redis配置
REDIS_HOST = ENV_DICT.get('REDIS_HOST', '127.0.0.1')
REDIS_PORT = ENV_DICT.get('REDIS_PORT', 6379)
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [(REDIS_HOST, REDIS_PORT)],
},
},
}
```
接着,创建一个名为`consumers.py`的文件,通常放在`apps`目录下,定义WebSocket消费者类。这个类会处理连接、断开连接以及接收和发送消息:
```python
from channels.generic.websocket import WebsocketConsumer
class MyConsumer(WebsocketConsumer):
def connect(self):
# 每个任务作为一个频道
self.job_name = self.scope['url_route']['kwargs']['job_name']
self.join_group(self.job_name)
def disconnect(self, close_code):
self.leave_group(self.job_name)
def receive(self, text_data):
# 处理接收到的消息并广播给组内所有成员
text_data_json = json.loads(text_data)
message = text_data_json['message']
self.send(text_data=json.dumps({
'message': message
}))
```
### Vue.js前端实现
在前端,我们需要使用Vue.js来创建一个WebSocket连接。首先,在Vue组件中初始化WebSocket连接,并监听连接状态变化以及接收消息:
```javascript
<template>
<button @click="connect">建立连接</button>
<div v-for="msg in messages" :key="msg.id">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
messages: [],
socket: null,
jobName: 'your_job_name', // 与后端的job_name匹配
};
},
methods: {
connect() {
this.socket = new WebSocket(`ws://your_server_url/ws/${this.jobName}/`);
this.socket.onopen = this.handleOpen;
this.socket.onclose = this.handleClose;
this.socket.onmessage = this.handleMessage;
},
handleOpen() {
console.log('WebSocket连接已建立');
},
handleClose(event) {
console.log('WebSocket连接已关闭', event);
},
handleMessage(event) {
const message = JSON.parse(event.data);
this.messages.push(message.message);
},
sendMessage(message) {
this.socket.send(JSON.stringify({ message }));
},
},
};
</script>
```
### 总结
通过以上步骤,我们就构建了一个基础的Django+Vue WebSocket应用,实现了前端页面点击按钮后建立连接,并能实时显示后端任务执行情况。当后端有新的任务更新时,可以通过WebSocket将消息推送给前端,从而达到实时通信的效果。需要注意的是,实际项目中可能需要处理更多细节,如错误处理、连接重试、安全验证等。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-05-13 上传
2024-05-25 上传
2024-12-01 上传
2021-04-29 上传
2021-05-12 上传
2024-11-21 上传
weixin_38643127
- 粉丝: 8
- 资源: 921
最新资源
- JavaScript实现的高效pomodoro时钟教程
- CMake 3.25.3版本发布:程序员必备构建工具
- 直流无刷电机控制技术项目源码集合
- Ak Kamal电子安全客户端加载器-CRX插件介绍
- 揭露流氓软件:月息背后的秘密
- 京东自动抢购茅台脚本指南:如何设置eid与fp参数
- 动态格式化Matlab轴刻度标签 - ticklabelformat实用教程
- DSTUHack2021后端接口与Go语言实现解析
- CMake 3.25.2版本Linux软件包发布
- Node.js网络数据抓取技术深入解析
- QRSorteios-crx扩展:优化税务文件扫描流程
- 掌握JavaScript中的算法技巧
- Rails+React打造MF员工租房解决方案
- Utsanjan:自学成才的UI/UX设计师与技术博客作者
- CMake 3.25.2版本发布,支持Windows x86_64架构
- AR_RENTAL平台:HTML技术在增强现实领域的应用