• 基于Python+Django框架的多人在线聊天程序


    基于Python的多人在线聊天程序

    项目简介

    本项目的选题为项目六:聊天程序,具体项目任务如下所示:

    在这里插入图片描述

    经过开发,本项目最终实现了项目任务 2. 的大体功能,实现了多用户之间的在线聊天室。

    项目分析

    本项目采用 Django 框架,后端以 Python 为语言搭建 Web 界面作为聊天室的载体。通过借助Django的channels插件,在Django框架中实现基于Websocket 协议的数据传输,实现项目要求的具体任务。

    实例展示

    进入本地虚拟环境,启动 Django 服务器:

    在这里插入图片描述

    访问 进入项目主页面:

    在这里插入图片描述

    在输入框内输入聊天室名称“test”,进入名为 test 的聊天室:

    在这里插入图片描述

    新开两个网页,分别进入”test”和“anothertest”两个聊天室。在聊天室中发送内容“Hello world!”,检查不同聊天室的收到情况:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    可以看到,处在同一聊天室的两个客户端实现了在线聊天,处在不同聊天室的客户端之间无法进行在线聊天。

    项目目录:

    在这里插入图片描述
    在这里插入图片描述

    核心代码: consumers.py: 负责处理通过 websocket 路由转发过来的请求和数据,类似于

    “views.py”的功能。

    import json from asgiref.sync import async_to_sync from channels.generic.websocket import WebsocketConsumer import datetime 
        class ChatConsumer(WebsocketConsumer):      def connect(self): 
             self.room_name = self.scope['url_route']['kwargs']['room_name']          self.room_group_name = 'chat_%s' % self.room_name 
              async_to_sync(self.channel_layer.group_add)(              self.room_group_name,              self.channel_name 
             ) 
              self.accept() 
           def disconnect(self, close_code): 
             async_to_sync(self.channel_layer.group_discard)(              self.room_group_name,              self.channel_name 
             ) 
          def receive(self, text_data): 
             text_data_json = json.loads(text_data)          message = text_data_json['message'] 
              async_to_sync(self.channel_layer.group_send)(              self.room_group_name, 
                 { 
                     'type': 'chat_message', 
                     'message': message 
                 } 
             ) 
          def chat_message(self, event):          message = event['message'] 
          datetime_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 
              self.send(text_data=json.dumps({ 
                 'message': f'{datetime_str}:{message}' 
             })) 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    room.html:前端关于即时通信的实现。

    <!DOCTYPE html> 
    {%load static%} 
    <html> 
    <head> 
        <meta charset="utf-8"/> 
        <title>Chat Room</title> 
        <link rel="stylesheet" type="text/css" href="{% static 
    'room.css' %}" charset="utf-8"/> 
    </head> 
    <body> 
        <div class="header"> 
            <h1>在线聊天室 By SJZ</h1> 
        </div> 
        <br></br> 
        <textarea id="chat-log" cols="100" rows="20" readonly="readonly"></textarea><br> 
        <input id="chat-message-input" type="text" size="100"> 
        <input id="chat-message-submit" type="button" value="Send"> 
        {{ room_name|json_script:"room-name" }} 
      <script>         const roomName = JSON.parse(document.getElementById('roomname').textContent); 
              const wss_protocol = (window.location.protocol == 'https:') ? 
    'wss://': 'ws://';         const chatSocket = new WebSocket(              wss_protocol + window.location.host + '/ws/chat/'  + roomName + '/'              ); 
              chatSocket.onopen = function(e) {              document.querySelector('#chat-log').value += ('[公告]欢迎来到' + roomName + '聊天室。请遵守国家法律法规,文明发言!\n')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    document.querySelector(‘#chat-log’).value += (‘[公告]欢迎来到’ + roomName + ‘聊天室。请遵守国家法律法规,文明发言!\n’)

    
    
    • 1
  • 相关阅读:
    Docker安装MySQL
    在Spring Boot应用中实现阿里云短信功能的整合
    多线程(虚拟地址空间)
    MQ - 21 可观测性_消息轨迹功能的设计
    i7z命令工具 – 用来查看CPU状况
    计算机毕业设计python毕设项目之django本地健康宝微信小程序
    贴纸拼词 —— 记忆化搜索 / 状压DP
    30分钟彻底弄懂 synchronized 锁升级过程
    【Linux】Linux系统编程(入门与系统编程)(三)(深入理解操作系统、进程、环境变量、内存分布)
    Elasticsearch:Open Crawler 发布技术预览版
  • 原文地址:https://blog.csdn.net/newlw/article/details/126769635