Django 频道 VS Django 3.0 / 3.1?
Django Channels VS Django 3.0 / 3.1?
有人可以阐明 Django Channels Project and new Django native async support 之间的区别或互补之处吗?
据我了解,Django-Channels 是一个在 Django 之外启动的项目,然后开始集成到核心 Django 中。但是这项工作的当前状态仍然让我感到困惑。
例如,今天我使用的是 Django 2.2,我想为我的项目添加 WebSocket 支持。我应该:
- 升级到最新的 Django 版本?
- 使用 Django 频道包?
- 两个动作都做吗?
today I'm using Django 2.2, and I'd like to add WebSocket support to my project.
如果你想为你的应用程序添加 websocket 支持,目前你不需要升级到 django 3.0。 Django 2.2 plus channels 可以做到这一点——目前是最好的方法。 (尽管如果你没有任何充分的理由不升级到 django 3.0 绝对没有坏处)。我会尝试在这个答案中进一步解释原因。
From what I understood, Django-Channels is a project that have been
started outside of Django, and then, started to be integrated in the
core Django. But the current state of this work remains confusing to
me.
是的,我的理解是频道最初是作为 Django 核心开发人员之一的项目(Andrew Godwin - 他在 Django 3.0 中带来的异步更改方面也发挥了重要作用)。如果您只安装 Django,它不会自动包含,但它正式成为 django 项目的一部分,并且自 2016 年 9 月以来一直存在(请参阅 here).它现在是 2.4 版,也是一个已建立且稳定的项目,可用于将 websockets 添加到您的 django 应用程序。
那么 Django 3.x 和异步发生了什么?
虽然通道添加了一种方法来向您的 Django 应用程序添加一些异步功能,但 Django 的核心仍然是同步的。正在逐步引入的 'async' 项目解决了这个问题。这里要注意的关键是它是逐渐引入的。 Django 由几层组成:
- WSGI服务器(实际上不是django的一部分):处理实际接受HTTP请求的协议
- Base Handler:它接收从服务器传递给它的请求,并确保它通过中间件和 url 配置发送,这样我们最终得到一个 django 请求对象和一个视图将其传递给。
- 视图层(它会执行您告诉它的任何操作)
- ORM,以及您使用 Django 获得的所有其他可爱的东西,我们可以从视图中调用它们。
现在要充分受益于异步,我们确实需要所有这些层都是异步的,否则实际上不会有任何性能优势。这是一个相当大的项目,因此逐步推出它的原因:
- 随着 django 3.0 的发布,真正添加的是与 ASGI 服务器通信的能力(而不仅仅是 WSGI 服务器)。
- 当 Django 3.1 发布时(预计 2020 年 8 月),预计会有异步中间件和视图的功能。
- 最后在 django 3.2,甚至 4.0 中,我们将在整个 Django 中获得异步功能。
一旦我们到达最后一点,可能值得考虑将 Django 的异步功能用于网络套接字之类的东西,但目前我们甚至无法利用我们现在可以处理的事实ASGI 以及 WSGI 服务器。您可以将 Django 与 ASGI 服务器一起使用,但是没有意义,因为基本处理程序仍然是同步的。
TLDR
- Django channels 添加了一种处理 HTTP 以外的协议的方法,并添加了对 django 的会话框架和身份验证框架等内容的集成,因此可以轻松地将 websockets 之类的内容添加到您的 django 项目中。它已完成,您今天就可以开始使用它了!!
- 本机异步支持是对 Django 核心的基本重写。这是一个进展中的工作。这非常令人兴奋,但还需要一段时间才能真正受益。
在去年的 djangoCon 上有一个很好的演讲概述了异步 django 的计划。可以查看here.
有人可以阐明 Django Channels Project and new Django native async support 之间的区别或互补之处吗?
据我了解,Django-Channels 是一个在 Django 之外启动的项目,然后开始集成到核心 Django 中。但是这项工作的当前状态仍然让我感到困惑。
例如,今天我使用的是 Django 2.2,我想为我的项目添加 WebSocket 支持。我应该:
- 升级到最新的 Django 版本?
- 使用 Django 频道包?
- 两个动作都做吗?
today I'm using Django 2.2, and I'd like to add WebSocket support to my project.
如果你想为你的应用程序添加 websocket 支持,目前你不需要升级到 django 3.0。 Django 2.2 plus channels 可以做到这一点——目前是最好的方法。 (尽管如果你没有任何充分的理由不升级到 django 3.0 绝对没有坏处)。我会尝试在这个答案中进一步解释原因。
From what I understood, Django-Channels is a project that have been started outside of Django, and then, started to be integrated in the core Django. But the current state of this work remains confusing to me.
是的,我的理解是频道最初是作为 Django 核心开发人员之一的项目(Andrew Godwin - 他在 Django 3.0 中带来的异步更改方面也发挥了重要作用)。如果您只安装 Django,它不会自动包含,但它正式成为 django 项目的一部分,并且自 2016 年 9 月以来一直存在(请参阅 here).它现在是 2.4 版,也是一个已建立且稳定的项目,可用于将 websockets 添加到您的 django 应用程序。
那么 Django 3.x 和异步发生了什么?
虽然通道添加了一种方法来向您的 Django 应用程序添加一些异步功能,但 Django 的核心仍然是同步的。正在逐步引入的 'async' 项目解决了这个问题。这里要注意的关键是它是逐渐引入的。 Django 由几层组成:
- WSGI服务器(实际上不是django的一部分):处理实际接受HTTP请求的协议
- Base Handler:它接收从服务器传递给它的请求,并确保它通过中间件和 url 配置发送,这样我们最终得到一个 django 请求对象和一个视图将其传递给。
- 视图层(它会执行您告诉它的任何操作)
- ORM,以及您使用 Django 获得的所有其他可爱的东西,我们可以从视图中调用它们。
现在要充分受益于异步,我们确实需要所有这些层都是异步的,否则实际上不会有任何性能优势。这是一个相当大的项目,因此逐步推出它的原因:
- 随着 django 3.0 的发布,真正添加的是与 ASGI 服务器通信的能力(而不仅仅是 WSGI 服务器)。
- 当 Django 3.1 发布时(预计 2020 年 8 月),预计会有异步中间件和视图的功能。
- 最后在 django 3.2,甚至 4.0 中,我们将在整个 Django 中获得异步功能。
一旦我们到达最后一点,可能值得考虑将 Django 的异步功能用于网络套接字之类的东西,但目前我们甚至无法利用我们现在可以处理的事实ASGI 以及 WSGI 服务器。您可以将 Django 与 ASGI 服务器一起使用,但是没有意义,因为基本处理程序仍然是同步的。
TLDR
- Django channels 添加了一种处理 HTTP 以外的协议的方法,并添加了对 django 的会话框架和身份验证框架等内容的集成,因此可以轻松地将 websockets 之类的内容添加到您的 django 项目中。它已完成,您今天就可以开始使用它了!!
- 本机异步支持是对 Django 核心的基本重写。这是一个进展中的工作。这非常令人兴奋,但还需要一段时间才能真正受益。
在去年的 djangoCon 上有一个很好的演讲概述了异步 django 的计划。可以查看here.