Django 中admin页面的css样式无法加载的终极解决方案
删掉 /usr/local/lib/python3.8/dist-packages/django/contrib/admin/templates/admin
的base.html
中的<!DOCTYPE html>
,重启django,搞定了.
Django Channels
是 Django 框架的一个扩展,它扩展了 Django 的功能,使其能够处理异步协议,包括 WebSocket、HTTP/2 等。Django 本身是一个同步的 Web 框架,主要处理传统的 HTTP 请求和响应,而 Django Channels 引入了异步处理能力,让 Django 可以应对需要实时通信的场景。
异步的优点之一:
并行处理多个任务:异步编程可以实现任务的并行执行,多个任务可以在同一个线程中交替执行,避免了线程切换的开销。相比于多线程编程,异步编程在处理大量并发任务时更加高效,因为它不需要为每个任务创建一个单独的线程。
channels_redis
:
是 Django Channels 的一个具体实现,它使用 Redis 作为通道层的后端存储。Redis 是一个高性能的键值对存储数据库,支持多种数据结构,非常适合用于实现消息队列和发布 - 订阅系统,这与 Django Channels 的通道层需求相契合。
channels_redis 使得 Django Channels 能够利用 Redis 的高性能和稳定性来处理大量的并发连接和消息传递。它提供了一个可靠的通道层实现,让开发者可以在 Django 项目中方便地实现实时通信功能。
self.channel_name
自动分配:
self.channel_name 会由 Django Channels 自动分配。当一个新的连接(如 WebSocket 连接)建立时,Django Channels 会为该连接生成一个唯一的通道名称,并将其赋值给 self.channel_name。这个通道名称是一个字符串,用于在通道层(channel layer)中唯一标识这个连接,以实现不同连接之间的消息通信。
self.room_name
非自动分配:
self.room_name 不会自动分配,它通常需要开发者根据业务逻辑手动设置。room_name 一般用于标识一个 “房间” 或者 “组”,多个连接可以加入同一个房间,从而实现组内消息的广播等功能。常见的做法是从请求的 URL 参数、请求头或者其他上下文中获取房间名称。
wsgi
和 asgi
WSGI 是 Python Web 应用程序和 Web 服务器之间的一种简单而通用的接口规范。它定义了 Web 服务器如何与 Python Web 应用程序进行通信,使得不同的 Web 服务器(如 Apache、Nginx 等)能够运行各种符合 WSGI 规范的 Python Web 应用(如 Django、Flask 等)。
django中的配置文件: wsgi.py
随着异步编程在 Python 中的发展,为了支持异步 Web 应用和 WebSocket 等异步协议,出现了 ASGI 标准。ASGI 是 WSGI 的超集,它不仅兼容 WSGI 应用,还支持异步处理,能够更好地处理高并发和实时通信场景。
django中的配置文件: asgi.py
AsyncWebsocketConsumer
类的作用
引入:
from channels.generic.websocket import AsyncWebsocketConsumer
AsyncWebsocketConsumer 是 Django Channels 提供的一个用于处理 WebSocket 连接的异步消费者类。消费者(Consumer)是 Django Channels 中处理不同类型连接的核心组件,AsyncWebsocketConsumer 专门用于处理 WebSocket 连接的异步操作。
通过继承 AsyncWebsocketConsumer 类,开发者可以方便地实现 WebSocket 服务端的逻辑,包括连接建立、断开、消息接收和发送等操作。该类提供了一些可重写的方法,用于处理不同的 WebSocket 事件。
django_redis
django - redis 是一个用于在 Django 项目中集成 Redis 的第三方库,它提供了简单且高效的方式让 Django 项目能够使用 Redis 的各种功能,
–