Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django频道与Django 3.0/3.1?_Python_Django_Django Channels - Fatal编程技术网

Python Django频道与Django 3.0/3.1?

Python Django频道与Django 3.0/3.1?,python,django,django-channels,Python,Django,Django Channels,有人能解释一下新事物之间的区别或互补性吗 据我所知,Django频道是一个在Django之外启动的项目,然后开始集成到核心Django中。但这项工作的现状仍然让我感到困惑 例如,今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持。我应该: 是否升级到最新的Django版本 使用Django通道包 两个动作都做吗 今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持 如果您想向应用程序添加websocket支持,目前无需升级到django 3.

有人能解释一下新事物之间的区别或互补性吗

据我所知,Django频道是一个在Django之外启动的项目,然后开始集成到核心Django中。但这项工作的现状仍然让我感到困惑

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

  • 是否升级到最新的Django版本
  • 使用Django通道包
  • 两个动作都做吗
今天我使用的是Django 2.2,我想为我的项目添加WebSocket支持

如果您想向应用程序添加websocket支持,目前无需升级到django 3.0。Django 2.2 plus频道可以做到这一点,目前来说这是最好的方式。(尽管升级到Django3.0绝对没有坏处,如果你没有任何理由不这么做的话)。我将尝试在这个答案中进一步解释原因

据我所知,Django频道是一个已经被开发的项目 从Django之外开始,然后开始集成到 core Django。但这项工作的现状仍然让人困惑 我

是的,据我所知,channels最初是作为一个项目由Django的核心开发人员之一(Andrew Godwin,他在Django 3.0中带来的异步更改方面也发挥了重要作用)发起的。如果您只是安装Django,它不会自动包含在内,但它是Django项目的正式组成部分,自2016年9月以来一直存在(请参阅)。它现在是2.4版,是一个已建立且稳定的项目,可用于将WebSocket添加到django应用程序中

那么Django3.x和async到底是怎么回事? 虽然Channel为您的django应用程序添加了一些异步功能,但django的核心仍然是同步的。正在逐步引入的“异步”项目解决了这一问题。这里需要注意的关键是,它正在逐步引入。Django由几个层组成:

  • WSGI服务器(实际上不是django的一部分):处理实际接受HTTP请求的协议
  • 基本处理程序:它接受从服务器传递给它的请求,并确保它通过中间件和url配置发送,这样我们就得到了一个django请求对象和一个要传递给它的视图
  • 视图层(按您的指示执行)
  • ORM,以及所有其他你从Django那里得到的可爱的东西,我们可以从视图中调用
现在,为了充分受益于异步,我们确实需要所有这些层都是异步的,否则就不会有任何性能优势。这是一个相当大的项目,因此正在逐步推出:

  • 随着Django3.0的发布,真正增加的是与ASGI服务器(而不仅仅是WSGI服务器)通信的能力
  • 当Django 3.1发布时(预计2020年8月),预计将有异步中间件和视图的功能
  • 最后,在django 3.2,甚至4.0中,我们将在整个django上下获得异步功能
一旦我们到了最后一点,也许值得考虑将Django的异步特性用于web套接字之类的东西,但目前我们甚至不能利用我们现在可以处理ASGI和WSGI服务器这一事实。您可以将Django与ASGI服务器一起使用,但没有意义,因为基本处理程序仍然是同步的

太长,读不下去了
  • Django通道添加了一种处理HTTP以外的协议的方法,并将集成添加到Django的会话框架和身份验证框架中,因此很容易将WebSocket之类的东西添加到Django项目中。它已经完成了,你今天就可以开始使用它了
  • 本机异步支持是Django核心的基本重写。这是一项正在进行的工作。这非常令人兴奋,但暂时还不能真正从中受益
去年,djangoCon进行了一次很好的讨论,概述了异步django的计划。您可以查看它。

已经有一篇文章讨论了这两种方法之间的异同。