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

下载

相关推荐
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe6 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin6 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4086 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc7 小时前
《Python基础》之基本数据类型
开发语言·python
天天进步20157 小时前
Vue+Springboot用Websocket实现协同编辑
vue.js·spring boot·websocket
drebander8 小时前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子8 小时前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
盛夏绽放8 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
墨染风华不染尘9 小时前
python之开发笔记
开发语言·笔记·python