django websocket

目录

核心代码

consumers.py

python 复制代码
from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer
import datetime
import time
from asgiref.sync import async_to_sync
class ChatConsumer(WebsocketConsumer):
    def websocket_connect(self, message):
        # 有客户端像后端发送websocket连接的请求时候,自动触发
        # 服务端允许和客户端创建连接
        self.accept()
    def websocket_receive(self, message):
        # 浏览器基于websocket想后端发送数据,自动触发接受消息
        print(f"接收到消息了:{message}")
        self.send("不要回复不要回复",datetime.datetime.now())
        #self.close() 这个是服务端主动断开连接
    def websocket_disconnect(self, message):
        # 客户端与服务器断开连接是,自动触发
        print("关闭连接")
        raise StopConsumer

tests.py

python 复制代码
import requests
url='http://127.0.0.1:8000/info/'
response=requests.post(url=url,json={'name':'张无忌','info':'太极'})
print(response.text)
``
views.py

```python
from django.shortcuts import render
from django.http import request,JsonResponse

# Create your views here.

def index(request):
    return render(request,'index.html',locals())

def info(request):
    if request.method=='POST':
        print(request.body.decode())
        return JsonResponse({'status':'success'})

index.html

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/jquery-3.6.1.min.js"></script>
</head>
<body>
<div id="message">
<div>
    <input type="text" placeholder="请输入" id="txt">
    <input type="button" value="发送" onclick="sendMessage()">
</div>
</div>
<script>
    socket=new WebSocket("ws://127.0.0.1:8000/ws/group/")
    function sendMessage() {
        socket.send($("#txt").val())
        $("#txt").val('')
    }
    socket.onmessage=function  (event){
        console.log("接收到消息了收到了吗")
        console.log(event.data)
    }
    socket.onclose=function (event){
        console.log("断开连接")
    }
</script>
</body>
</html>

asgi.py

python 复制代码
import os

from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter,URLRouter
from dchannel import  routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dchannel.settings')

# application = get_asgi_application()
application=ProtocolTypeRouter({
    "http":get_asgi_application(),#自动去找urls.py,会找路由和视图函数-->http请求
    "websocket":URLRouter(routing.websocket_urlpatterns)#routing(urls),consumers(views)
})

routing.py

python 复制代码
from django.urls import re_path
from app01 import  consumers
websocket_urlpatterns={
    re_path(r'ws/(?P<group>\w+)/$',consumers.ChatConsumer.as_asgi())
}

urls.py

python 复制代码
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    path('info/',views.info)
]

下载

相关推荐
idingzhi2 分钟前
A股量化策略日报(2026年05月11日)
android·开发语言·python·kotlin
m0_740653223 分钟前
Redis如何查询附近的人_利用GEORADIUS指令进行Geo范围搜索
jvm·数据库·python
Jetev3 分钟前
宝塔面板如何实现网站重定向_配置301永久跳转与域名更换
jvm·数据库·python
AI机器学习算法3 分钟前
说走就走的AI之旅第01课:浅谈机器学习
数据结构·人工智能·python·深度学习·机器学习·大模型·线性回归
༒࿈南林࿈༒3 分钟前
yi欣考研刷题题库js逆向
python·js逆向
idolao4 分钟前
CentOS 7 安装 libtool-1.5.22.tar.gz 详细步骤(源码编译、配置、验证)
开发语言·python
2401_833033624 分钟前
c++如何解析二进制协议中的可选字段与默认值读取逻辑实现【实战】
jvm·数据库·python
源码之家6 分钟前
计算机毕业设计:Python基于数据挖掘的医院疾病分析与预测系统 Flask框架 数据分析 可视化 ARIMA算法 大数据 大模型(建议收藏)✅
python·信息可视化·数据挖掘·数据分析·flask·lstm·课程设计
m0_5913647311 分钟前
CSS 背景图滑动切换:纯 CSS 实现右进左出轮播效果
jvm·数据库·python
2401_8242226912 分钟前
Python测试代码如何实现自解释_使用pytest描述性命名规范
jvm·数据库·python