在django项目中使用channels websocket 实现前后端实时通信
时间: 2024-02-01 18:13:53 浏览: 179
Django使用Channels实现WebSocket的方法
首先,你需要安装 channels 库。可以使用 pip 安装:
```
pip install channels
```
然后,你需要在 Django 项目中添加 Channels 的配置。在 settings.py 中添加以下内容:
```python
INSTALLED_APPS = [
# ...
'channels',
]
ASGI_APPLICATION = 'your_project_name.routing.application'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [("127.0.0.1", 6379)],
},
},
}
```
接着,你需要创建一个路由文件。在项目根目录下创建一个 routing.py 文件,添加以下内容:
```python
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
application = ProtocolTypeRouter({
"websocket": URLRouter([
path("ws/your_url/", your_consumer),
]),
})
```
其中,your_consumer 是你自定义的 consumer,后面会讲到。
现在,你需要创建 consumer。在你的应用下创建一个 consumers.py 文件,添加以下内容:
```python
import json
from channels.generic.websocket import AsyncWebsocketConsumer
class YourConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
data = json.loads(text_data)
message = data['message']
await self.send(text_data=json.dumps({
'message': message
}))
```
这个 consumer 是非常简单的,只是将收到的消息原样返回。你可以根据需要自定义它。
最后,你需要在你的模板中添加 WebSocket 连接。例如:
```javascript
var socket = new WebSocket('ws://localhost:8000/ws/your_url/');
socket.onmessage = function(e) {
var data = JSON.parse(e.data);
console.log(data.message);
}
socket.onclose = function(e) {
console.error('WebSocket closed unexpectedly');
};
```
这样,就可以在前后端之间实现实时通信了。
阅读全文