Django Channels VS Django 3.0 / 3.1?

问题描述 投票:2回答:1

有人可以澄清Django Channels Project与新Django native async support之间的区别或互补吗?

据我了解,Django-Channels是一个在Django外部启动的项目,然后开始集成到核心Django中。但是这项工作的当前状态仍然让我感到困惑。

例如,今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持。我应该:

  • 是否要升级到最新的Django版本?
  • 使用Django Channels包?
  • 两个动作都做?
python django django-channels
1个回答
0
投票

今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持。

如果您想为您的应用程序添加websocket支持,目前无需升级到django 3.0。 Django 2.2 plus通道可以做到这一点-暂时是最好的方法。 (尽管如果没有充分的理由不这样做,升级到django 3.0绝对没有害处)。我将尝试进一步解释该答案的原因。

据我了解,Django-Channels是一个 开始于Django之外,然后开始整合到 核心Django。但是这项工作的当前状态仍然令人困惑 我。

[是的,我的理解是,渠道是从Django核心开发人员之一(Andrew Godwin-曾在实现Django 3.0中带来的异步更改方面发挥作用的)开始的一个项目。如果仅安装Django,它不会自动包含在内,但它正式是django项目的一部分,并且自2016年9月以来一直存在(请参阅here)。它现在在版本2.4上,因此是一个已建立且稳定的项目,可用于向您的Django应用添加websockets功能。

那么Django 3.x和异步发生了什么?

尽管渠道为django应用程序添加了一些添加异步功能的方法,但Django的核心仍然是同步的。正在逐步引入的“异步”项目解决了这一问题。这里要注意的关键是它正在逐步引入。 Django由几层组成:

  • WSGI服务器(实际上不是django的一部分):处理实际上接受HTTP请求的协议
  • 基本处理程序:这将从服务器传递给它的请求,并确保它是通过中间件和url配置发送的,这样我们最终得到一个django请求对象,以及一个将其传递给它的视图。
  • 视图层(它可以完成任何操作)
  • ORM,以及您从Django获得的所有其他可爱的东西,我们可以从视图中调用。

现在要完全从异步中受益,我们确实需要所有这些层都异步,否则实际上不会有任何性能上的好处。异步将逐步推出:

  • 随着django 3.0的发布,真正添加的只是与ASGI服务器通信的功能(而不仅仅是WSGI服务器)。
  • [Django 3.1发行时(预计于2020年8月),预计将具有异步中间件和视图的功能。
  • 然后终于在django 3.2或什至4.0中,我们将在整个Django中获得异步功能。

一旦到达最后一点,也许值得考虑将Django的异步功能用于网络套接字之类的东西,但是目前我们甚至无法利用我们现在也可以处理ASGI的事实作为WSGI服务器。

TLDR

  • Django通道增加了一种处理HTTP以外的协议的方法,并向django的会话框架和身份验证框架之类的东西添加了集成,因此很容易在django项目中添加诸如websockets之类的东西。它已经完成,您可以立即开始使用它!!
  • 本机异步支持是对Django核心的基本重写。这是一个进展中的工作。这非常令人兴奋,但是暂时还没有准备好真正受益。

[djangoCon去年发表了精彩的演讲,概述了异步django的计划。您可以查看它here

© www.soinside.com 2019 - 2024. All rights reserved.