Python如何使用WebSocket实现实时Web应用

 更新时间:2024年08月01日 11:20:54   作者:杰哥在此  
这篇文章主要介绍了Python使用WebSocket实现实时Web应用,Django Channels 提供了强大的功能,使得在 Django 中实现实时功能变得更加容易,你可以在此基础上扩展,添加更多功能和复杂的逻辑,需要的朋友可以参考下

使用 WebSocket 实现实时 Web 应用可以使你的应用程序具备实时双向通信的能力。以下是一个完整的指南,展示如何使用 Django Channels 和 WebSocket 实现一个简单的实时 Web 应用。

环境准备

安装 Django Channels:

pip install channels

创建 Django 项目:

django-admin startproject myproject
cd myproject

创建应用:

python manage.py startapp myapp

配置 Django 项目

添加应用到 INSTALLED_APPS:
myproject/settings.py 中,添加 channels 和你的应用 myapp

INSTALLED_APPS = [
    ...
    'channels',
    'myapp',
]

配置 Channels:
settings.py 中,添加 Channels 配置:

ASGI_APPLICATION = 'myproject.asgi.application'
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer",
    },
}

创建 asgi.py 文件:
myproject 目录下创建一个 asgi.py 文件:

import os
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from channels.auth import AuthMiddlewareStack
import myapp.routing
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

创建 WebSocket 路由

定义 WebSocket 路由:
myapp 目录下创建一个 routing.py 文件:

from django.urls import path
from . import consumers
websocket_urlpatterns = [
    path('ws/chat/', consumers.ChatConsumer.as_view()),
]

创建消费者

定义 WebSocket 消费者:
myapp 目录下创建一个 consumers.py 文件:

import json
from channels.generic.websocket import AsyncWebsocketConsumer
class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()
    async def disconnect(self, close_code):
        pass
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        await self.send(text_data=json.dumps({
            'message': message
        }))

创建前端页面

创建 HTML 页面:
myapp/templates/myapp 目录下创建一个 chat.html 文件:

<!DOCTYPE html>
<html>
<head>
    <title>Chat</title>
</head>
<body>
    <h1>WebSocket Chat</h1>
    <input id="messageInput" type="text" size="100">
    <button onclick="sendMessage()">Send</button>
    <ul id="messages">
    </ul>
    <script>
        const chatSocket = new WebSocket(
            'ws://' + window.location.host + '/ws/chat/'
        );
        chatSocket.onmessage = function(e) {
            const data = JSON.parse(e.data);
            document.querySelector('#messages').innerHTML += '<li>' + data.message + '</li>';
        };
        chatSocket.onclose = function(e) {
            console.error('Chat socket closed unexpectedly');
        };
        function sendMessage() {
            const messageInputDom = document.querySelector('#messageInput');
            const message = messageInputDom.value;
            chatSocket.send(JSON.stringify({
                'message': message
            }));
            messageInputDom.value = '';
        }
    </script>
</body>
</html>

创建视图:
myapp/views.py 中创建一个视图来渲染模板:

from django.shortcuts import render
def chat(request):
    return render(request, 'myapp/chat.html')

配置 URL:
myapp/urls.py 中添加 URL 路由:

from django.urls import path
from . import views
urlpatterns = [
    path('chat/', views.chat, name='chat'),
]

运行服务器

启动开发服务器:

python manage.py runserver

测试 WebSocket:
访问 http://127.0.0.1:8000/chat/,在输入框中输入消息并点击 “Send” 按钮,你应该会看到消息实时显示在页面上。

总结

通过上述步骤,你可以使用 Django Channels 和 WebSocket 创建一个简单的实时 Web 应用。Django Channels 提供了强大的功能,使得在 Django 中实现实时功能变得更加容易。你可以在此基础上扩展,添加更多功能和复杂的逻辑。

到此这篇关于Python使用WebSocket实现实时Web应用的文章就介绍到这了,更多相关Python使用WebSocket内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python新版极验验证码识别验证码教程详解

    Python新版极验验证码识别验证码教程详解

    这篇文章主要介绍了Python新版极验验证码识别验证码,极验验证是一种在计算机领域用于区分自然人和机器人的,通过简单集成的方式,为开发者提供安全、便捷的云端验证服务
    2023-02-02
  • TensorFlow2基本操作之 张量排序 填充与复制 查找与替换

    TensorFlow2基本操作之 张量排序 填充与复制 查找与替换

    这篇文章主要介绍了TensorFlow2基本操作之 张量排序 填充与复制 查找与替换,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • python中similarity函数实例用法

    python中similarity函数实例用法

    在本篇文章里小编给大家整理的是一篇关于python中similarity函数实例用法,有兴趣的朋友们可以跟着学习下。
    2021-10-10
  • Python实现在PowerPoint中添加和定制形状

    Python实现在PowerPoint中添加和定制形状

    在现代办公自动化场景中, programmatically 生成和编辑 PowerPoint 演示文稿已成为一项常见需求,本文将深入探讨如何使用 Python 在 PowerPoint 幻灯片中添加各种形状,并对其进行样式定制和效果设置,感兴趣的小伙伴可以了解下
    2026-03-03
  • Python 中的装饰器实现函数的缓存(场景分析)

    Python 中的装饰器实现函数的缓存(场景分析)

    Python中的装饰器可以用于实现函数的缓存,其原理是在函数执行前,首先判断传入的参数是否在缓存中已经存在对应的计算结果,这篇文章主要介绍了Python 中的装饰器可以用于实现函数的缓存,需要的朋友可以参考下
    2023-02-02
  • python学习-List移除某个值remove和统计值次数count

    python学习-List移除某个值remove和统计值次数count

    这篇文章主要介绍了 python学习-List移除某个值remove和统计值次数count,文章基于python的相关内容展开详细介绍,需要的小伙伴可以参考一下
    2022-04-04
  • matplotlib作图添加表格实例代码

    matplotlib作图添加表格实例代码

    这篇文章主要介绍了matplotlib作图添加表格实例代码,实例绘制了一个简单的折线图,并且在图中添加了一个表格,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解

    python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解

    这篇文章主要介绍了python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python基于滑动平均思想实现缺失数据填充的方法

    Python基于滑动平均思想实现缺失数据填充的方法

    今天小编就为大家分享一篇关于Python基于滑动平均思想实现缺失数据填充的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 浅析PyCharm 的初始设置(知道)

    浅析PyCharm 的初始设置(知道)

    这篇文章主要介绍了PyCharm 的初始设置(知道),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论