核心代码
consumers.py
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
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
<!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
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
from django.urls import re_path
from app01 import consumers
websocket_urlpatterns={
re_path(r'ws/(?P\w+)/$' ,consumers.ChatConsumer.as_asgi())
}
urls.py
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)
]
下载