IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django Channels配置 -> 正文阅读

[Python知识库]Django Channels配置

Django Channels

Channels包装了Django的原生异步视图支持(Django3之后支持异步视图),允许Django项目不仅可以处理HTTP,还可以处理WebSockets,MQTT等。Channels提供了与Django的身份验证系统,会话系统等的集成,使得将纯HTTP项目扩展到其他协议比以往任何时候都更容易。因此,通常我们在Django3上实现websocket还是会使用channels

安装channels

这个非常简单,执行pip安装即可。

pip3 install channels

注意,在安装channels时候,会附带安装一系列东西,其中最重要的是Daphne服务器,asgiref模块。因为我们会在程序中使用asgiref模块,在运行项目的时候,会使用Daphne.

配置channels

下面以一个真实的例子chatroom,作为演示在Django中配置channels。

首先在settings.py中进行注册和asgi网关配置。

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'channels',     # 注册channels
    'chat',
]

# settings.py

WSGI_APPLICATION = 'chatroom.wsgi.application'       # Django项目默认的WSGI配置,可以注释掉,也可以放着不管,因为之后我们不会使用WSGI作为网关,而是使用下面的ASGI配置。
ASGI_APPLICATION = "chatroom.asgi.application"       # 增加ASGI配置

然后,在项目的settings.py同级目录下的asgi.py文件中加入下面的内容:Django2.2是默认没有asgi.py文件,手动创建一个即可。Django3之后,项目默认会生成一个asgi.py文件。
默认内容如下:

import os

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chatroom.settings')
application = get_asgi_application()

默认的asgi虽然支持了异步服务,但是仍然不支持websocket。因此我们要修改asgi.py的内容如下所示:

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from . import routings      # 这个文件后续会说,你先写上。

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chatroom.settings')    
# application = get_asgi_application()  # 注释掉原来的application

application = ProtocolTypeRouter(
    {
        "http": get_asgi_application(),     # http走Django默认的asgi
        "websocket": URLRouter(routings.websocket_urlpatterns),         # websocket走channels
    }
)

Django2.2不支持asgi,因此无法从django.core.asgi导入get_asgi_application,需要使用如下配置。

import os
import django
from channels.http import AsgiHandler
from channels.routing import ProtocolTypeRouter
from . import routings      # 这个文件后续会说,你先写上。

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chatroom.settings')   
django.setup()

application = ProtocolTypeRouter({
  "http": AsgiHandler(),
  "websocket": URLRouter(routings.websocket_urlpatterns), 
})

经过这样的配置之后,我们之后运行项目的时候不在使用WSGI启动,而是使用ASGI启动项目。

接下来,在settings.py同级目录创建一个名为routings.py的文件,就是我们刚才在asgi.py中导入的那个文件。然后在routings.py文件中写上如下的内容:

from django.urls import re_path
from chat import consumers          # 从chat这个app导入consumers,先写上,稍后会说。

# websocket的路由配置
websocket_urlpatterns = [
    re_path("^room/(?P<group>\w+)", consumers.ChatConsumer.as_asgi()),
]

最后,在chat这个app的目录下创建consumers.py文件(如果你没有该app,那就需要创建一个,前面我们已经注册过这个app了)。在consumers.py中写入如下内容:

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

class ChatConsumer(WebsocketConsumer):

    def websocket_connect(self, message):
        self.accept()

    def websocket_receive(self, message):
        self.send(text_data='OK')       # 返回给客户端的消息

    def websocket_disconnect(self, message):
        raise StopConsumer()

运行项目

python3 manage.py migrate   # 执行迁移
python3 manage.py runserver 8080    # 运行项目

项目执行以后,可以观察到使用的是ASGI,而非WSGI.
在这里插入图片描述
现在,打开浏览器或者Postman等工具进行测试即可,这里使用浏览器的控制台发生websocket请求进行测试。如下图所示
在这里插入图片描述
现在,我们看一下服务器上的请求记录。
在这里插入图片描述
首先是“握手(HANDSHAKING)”,握手成功就连接上了(CONNECT)。当前端发送关闭之后,服务器收到以后,执行断开连接(DISCONNECT)操作。

到此为止,我们就完成了Django Channels的配置。下一篇讲述如何使用channels。

参考资料

channels文档

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:24:12  更:2021-12-04 13:26:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:45:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码