Django+Vue WebSocket实战:实时显示后端任务执行进度
155 浏览量
更新于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 上传
2021-04-29 上传
2021-05-12 上传
2024-02-15 上传
2024-11-21 上传
weixin_38643127
- 粉丝: 8
- 资源: 921
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析