您好,登錄后才能下訂單哦!
這篇文章主要介紹Django如何實現WebSocket在線聊天室功能,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
1.1 安裝
pip install channels==2.3
(saas) F:\Desktop\Python_Study\CHS-Tracer\saas>pip install channels==2.3
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting channels==2.3
Downloading
...
Successfully installed Automat-20.2.0 attrs-20.3.0 autobahn-21.3.1 channels-2.3.0
1.2 創建Django項目
1.3 http路由
url(r"^chat/$", chat_view.chat, name="chat"), # 聊天室
1.4 http視圖函數
def chat(request):
return render(request, "chat.html")
1.5 settings添加channels相關配置
INSTALLED_APPS = [ 'channels', # 項目中要使用channels做WebSocket了 ] ASGI_APPLICATION = "saas.routing.application" # 項目名.routing.application
1.6 創建routing.py(websocket的路由)和comsumers.py(websocket的視圖函數)
1.7 websocket路由
# -*- coding:utf-8 -*- # 作者:IT小學生蔡坨坨 # 時間:2021/4/23 18:21 # 功能:channels相關路由 from channels.routing import ProtocolTypeRouter, URLRouter from django.conf.urls import url from web import consumers application = ProtocolTypeRouter({ "websocket": URLRouter([ url(r'^chat/$', consumers.ChatConsumer), ]) })
1.8 websocket視圖函數
# -*- coding:utf-8 -*- # 作者:IT小學生蔡坨坨 # 時間:2021/4/23 18:25 # 功能:channels相關視圖 from channels.exceptions import StopConsumer from channels.generic.websocket import WebsocketConsumer # 定義一個列表,用于存放當前在線的用戶 CONSUMER_OBJECT_LIST = [] class ChatConsumer(WebsocketConsumer): def websocket_connect(self, message): """ 客戶端瀏覽器發來連接請求之后就會被觸發 :param message: :return: """ # 服務端接收連接,向客戶端瀏覽器發送一個加密字符串 self.accept() # 連接成功 CONSUMER_OBJECT_LIST.append(self) def websocket_receive(self, message): """ 客戶端瀏覽器向服務端發送消息,此方法自動觸發 :param message: :return: """ print("接受到消息了。", message) # 服務端給客戶端回一條消息 # self.send(text_data=message["text"]) for obj in CONSUMER_OBJECT_LIST: obj.send(text_data=message["text"]) def websocket_disconnect(self, message): """ 客戶端瀏覽器主動斷開連接 :param message: :return: """ # 服務端斷開連接 CONSUMER_OBJECT_LIST.remove(self) raise StopConsumer()
1.9 前端代碼
<!-- css樣式 --> <style> pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 18px; line-height: 1.42857143; color: #333; word-break: break-all; word-wrap: break-word; background-color: #00aaaa; border-radius: 12px; } </style> <!-- body內容 --> <div > <div class="panel panel-success"> <div class="panel-heading">在線實時聊天室</div> <div class="panel-body"> <div > <div id="content"> <!-- 聊天記錄 --> </div> </div> <div > <textarea type="text" id="txt" placeholder="請輸入消息內容......" class="form-control"></textarea> </div> </div> <div class="table"> <div> <button class="btn btn-danger" onclick="closeLink();" >斷開連接</button> <button class="btn btn-success" onclick="sendMsg();">發送</button> </div> </div> </div> </div> <!-- 消息模板 --> <div id="recordTemplate" class="hide"> <div class="right-info"> <!-- 用戶 --> <p>匿名用戶:</p> <!-- 消息內容 --> <pre> </pre> </div> </div> <!-- js代碼 --> <script> var STATUS; // 是否連接的標志 var ws = new WebSocket("ws://127.0.0.1:8000/chat/"); ws.onopen = function () { // 客戶端在握手環節驗證成功之后,自動執行此方法 console.log("連接成功。") }; ws.onmessage = function msg(event) { var $item = $("#recordTemplate").find('.right-info').clone(); $item.find('pre').html(event.data); $("#content").append($item); }; function sendMsg() { if (STATUS == false) { swal({ title: "已斷開", text: "當前已斷開連接,刷新頁面重新連接。" }); } else { ws.send($("#txt").val()); $("#txt").val(""); } } function closeLink() { ws.close(); STATUS = false; console.log("斷開連接"); swal({ text: "成功斷開連接,刷新頁面重新連接。" }); } </script>
http協議
chat路由 --> chat視圖函數
訪問:瀏覽器發送請求即可
websocket協議
chat路由 --> ChatConsumer(3個方法)
訪問:new WebSocket對象
以上是“Django如何實現WebSocket在線聊天室功能”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。