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)
]

下载

相关推荐
武天旭18 分钟前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新1 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事2 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户11481867894843 小时前
水印的实现方式逻辑
前端·python
贾公子3 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
木头左5 小时前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
Tt有了t5 小时前
设计模式速查
java·python·设计模式
deepseek236 小时前
Python日志拖慢请求?QueueHandler排队、丢失与退出实测
python·性能优化·logging·后端开发·queuehandler
用户91294046848426 小时前
Codex 从零到能交付(05):第一次改代码:生成一个文件清单脚本
python
Dmz丶6 小时前
前端转 AI 100 天 Day 38:Token 管理与成本优化——别让 API 账单爆炸
python