当前位置: 代码网 > it编程>前端脚本>Python > Python如何使用WebSocket实现实时Web应用

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

2024年08月01日 Python 我要评论
使用 websocket 实现实时 web 应用可以使你的应用程序具备实时双向通信的能力。以下是一个完整的指南,展示如何使用 django channels 和 websocket 实现一个简单的实时

使用 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com