最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django和websocket實現(xiàn)簡單的多人聊天的示例代碼

 更新時間:2025年01月10日 10:02:28   作者:jjw_zyfx  
本文主要介紹了使用Django和WebSocket實現(xiàn)一個簡單的多人聊天應(yīng)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、版本及環(huán)境 python 為3.9.12, django為4.2詳細信息如下:

asgiref           3.8.1
attrs             24.2.0
autobahn          24.4.2
Automat           24.8.1
cffi              1.17.1
channels          3.0.3
constantly        23.10.4
cryptography      44.0.0
daphne            3.0.2
Django            4.2
hyperlink         21.0.0
sqlparse          0.5.3
tomli             2.2.1
Twisted           24.11.0
txaio             23.1.1
typing_extensions 4.12.2
tzdata            2024.2
zope.interface    7.2

Django安裝指定版本(上邊的安裝包也有可能安裝多了,但必須要有python,Django, channels)

pip install django==4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

2、創(chuàng)建Django項目

django-admin startproject ws_demo
python manage.py startapp app01

3、安裝channels

pip install channels==3.0.3 -i  -i https://pypi.tuna.tsinghua.edu.cn/simple

4、項目整體目錄結(jié)構(gòu)如下:

在這里插入圖片描述

5、配置setting文件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "channels",   # 添加channels
    "app01.apps.App01Config"   # 添加app01
]

# 在setting最后添加一個 "ws_demo.asgi.application" 意思是"項目名稱.asgi文件.application變量名稱"
ASGI_APPLICATION = "ws_demo.asgi.application"

6、asgi.py文件中的內(nèi)容如下;

import os
from channels.routing import ProtocolTypeRouter, URLRouter
# from django.conf.urls import url
# from chat import consumers
from django.core.asgi import get_asgi_application
from . import routings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ws_demo.settings')
# application = get_asgi_application()
application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    'websocket': URLRouter(routings.websocket_urlpatterns)
})

7、新建routings.py文件,其內(nèi)容如下:

from django.urls import re_path
from app01 import consumers

websocket_urlpatterns = [
    # 示例 url : xxxxx/room/x1/
    re_path(r"room/(?P<group>\w+)/$", consumers.ChatConsumer.as_asgi())
]

8、ws_demo下的urls.py中的內(nèi)容如下:

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    # path("admin/", admin.site.urls),
    path('index/', views.index),
]

9、在app01應(yīng)用下新建templates目錄,并在其下新建index.html,其內(nèi)容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .message {
            height: 300px;
            border: 1px solid #dddddd;
            width: 100%;
        }
    </style>
</head>

<body>
<div class="message" id="message"></div>
<div>
    <input type="text" placeholder="請輸入" id="txt">
    <input type="button" value="發(fā)送" onclick="sendMsg()">
    <input type="button" value="關(guān)閉連接" onclick="closeConn()">
    <input type="button" value="重新建立連接" onclick="connect()">
</div>

<script>
    var socket = null;
    function connect() {
        socket = new WebSocket("ws:/127.0.0.1:8000/room/123/");

        // 連接完成以后 客戶端自動觸發(fā)
        socket.onopen = function (event) {
            let tag = document.createElement("div")
            tag.innerHTML = "連接已建立"
            document.getElementById("message").appendChild(tag)
        }

        // 回調(diào)函數(shù) 當(dāng)服務(wù)端有消息發(fā)送到時,自動觸發(fā)
        socket.onmessage = function (event) {
            console.log(event.data);
            let tag = document.createElement("div");
            tag.innerText = event.data;
            document.getElementById("message").appendChild(tag)
        }

        // 當(dāng)連接關(guān)閉時,觸發(fā)
        socket.onclose = function (event) {
            let tag = document.createElement("div")
            tag.innerHTML = "連接已斷開"
            document.getElementById("message").appendChild(tag)

        }
    }
    function sendMsg() {
        let tag = document.getElementById("txt")
        socket.send(tag.value)
    }
    function closeConn() {
        // 向服務(wù)端發(fā)送斷開連接
        socket.close();
    }
    connect()
</script>
</body>
</html>

10、在app01應(yīng)用下新建consumers.py文件其內(nèi)容如下:

from channels.generic.websocket import WebsocketConsumer
from channels.exceptions import StopConsumer

#  簡單版群聊就是定義個數(shù)組,并在連接時把對象添加到數(shù)組內(nèi),在斷開鏈接時移除對象
CONN_LIST = []

class ChatConsumer(WebsocketConsumer):  # 繼承WebsocketConsumer
   def websocket_connect(self, message):
       print("有人進行連接了。。。。")
       CONN_LIST.append(self)
       # 有客戶端向后端發(fā)送 WebSocket 連接的請求時,自動觸發(fā)(握手)
       self.accept()

   def websocket_receive(self, message):
       # 瀏覽器基于 WebSocket 向后端發(fā)送數(shù)據(jù),自動觸發(fā)接收消息
       print(message)
       #  一對一聊天
       # if message["text"] == "close":
       #     self.send("服務(wù)端主動關(guān)閉連接")
       #     #  服務(wù)端主動關(guān)閉連接
       #     self.close()
       # self.send(message["text"])
       for conn in CONN_LIST:
           conn.send(message["text"])



   def websocket_disconnect(self, message):
       # 客戶端向服務(wù)端斷開連接時,自動觸發(fā)
       CONN_LIST.remove(self)
       print("連接斷開??!")
       raise StopConsumer()

11、運行項目 在項目根目錄下執(zhí)行:

python manage.py runserver

12、至此即可在瀏覽器中進行簡單的多人聊天,結(jié)果如下:

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于Django和websocket實現(xiàn)簡單的多人聊天的示例代碼的文章就介紹到這了,更多相關(guān)Django websocket多人聊天內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 手把手教你Python抓取數(shù)據(jù)并可視化

    手把手教你Python抓取數(shù)據(jù)并可視化

    很多小伙伴在提到python數(shù)據(jù)可視化的時候第一反應(yīng)就是matplotlib庫,但實際上python還有很多很好用的數(shù)據(jù)可視化的庫,下面這篇文章主要給大家介紹了關(guān)于如何利用Python抓取數(shù)據(jù)并可視化的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python中如何使用Pandas庫自定義函數(shù)

    Python中如何使用Pandas庫自定義函數(shù)

    Pandas是Python中用于數(shù)據(jù)分析和處理的強大庫,它提供了豐富的功能,可以輕松地處理各種類型的數(shù)據(jù),在實際應(yīng)用中,我們經(jīng)常需要對數(shù)據(jù)進行復(fù)雜的轉(zhuǎn)換、計算或聚合操作,而這些操作往往不能僅靠Pandas內(nèi)置的函數(shù)完成,這時,自定義函數(shù)就顯得尤為重要
    2025-01-01
  • Python?webargs?模塊的簡單使用

    Python?webargs?模塊的簡單使用

    webargs是一個用于解析和驗證HTTP請求對象的Python庫,今天通過本文給大家介紹Python?webargs?模塊的安裝使用,感興趣的朋友一起看看吧
    2022-01-01
  • 用Python實現(xiàn)最速下降法求極值的方法

    用Python實現(xiàn)最速下降法求極值的方法

    今天小編就為大家分享一篇用Python實現(xiàn)最速下降法求極值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python實現(xiàn)切割mp3片段并降低碼率

    Python實現(xiàn)切割mp3片段并降低碼率

    MoviePy是一個基于Python的視頻編輯庫,它提供了創(chuàng)建、編輯、合并、剪輯和轉(zhuǎn)換視頻的功能,所以本文主要介紹如何使用moviepy來分割音頻流并降低碼率,感興趣的可以了解下
    2023-08-08
  • python3中的類繼承你真的了解嗎

    python3中的類繼承你真的了解嗎

    這篇文章主要為大家詳細介紹了python3中的類繼承,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python?中的?module?和?package

    python?中的?module?和?package

    這篇文章主要介紹了?python?中的?module?和?package?,文章基于Python的相關(guān)資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 39條Python語句實現(xiàn)數(shù)字華容道

    39條Python語句實現(xiàn)數(shù)字華容道

    這篇文章主要為大家詳細介紹了39條Python語句實現(xiàn)數(shù)字華容道,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python+PyQT5的子線程更新UI界面的實例

    Python+PyQT5的子線程更新UI界面的實例

    今天小編就為大家分享一篇Python+PyQT5的子線程更新UI界面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python 畫出使用分類器得到的決策邊界

    python 畫出使用分類器得到的決策邊界

    這篇文章主要介紹了python 畫出使用分類器得到的決策邊界,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

远安县| 盐亭县| 柞水县| 吉木萨尔县| 甘谷县| 咸丰县| 明水县| 泰宁县| 合山市| 叙永县| 富民县| 沂南县| 布尔津县| 宜兴市| 汉寿县| SHOW| 确山县| 仙居县| 衡山县| 织金县| 文山县| 灌云县| 常熟市| 黑山县| 大同县| 长治市| 太白县| 昭通市| 临洮县| 咸宁市| 额济纳旗| 辽宁省| 英吉沙县| 陕西省| 宿迁市| 承德市| 合山市| 湟中县| 吉首市| 堆龙德庆县| 崇文区|