如何使用ASGI进行部署

除了WSGI,Django还支持在上部署 ASGI, 用于异步web服务器和应用程序的新兴Python标准。

贾戈 startproject management命令为您设置一个默认的ASGI配置,您可以根据项目的需要对其进行调整,并指示任何符合ASGI的应用程序服务器使用。

Django包括以下ASGI服务器的入门文档:

这个 application 对象

像WSGI一样,ASGI让你提供一个 application 应用服务器用来与代码通信的可调用文件。它通常作为名为 application 在服务器可访问的python模块中。

这个 startproject 命令创建文件 <project_name>/asgi.py 包含这样一个 application 可赎回的。

开发服务器没有使用它 (runserver ),但可以由任何ASGI服务器在开发或生产中使用。

ASGI服务器通常将指向可调用应用程序的路径作为一个字符串;对于大多数Django项目,这看起来像 myproject.asgi:application .

警告

虽然Django的默认ASGI处理程序将在同步线程中运行所有代码,但如果选择运行自己的异步处理程序,则必须注意异步安全性。

不要在任何异步代码中调用阻塞同步函数或库。Django阻止您使用Django中非异步安全的部分来执行此操作,但第三方应用程序或Python库可能不会这样做。

配置设置模块

当ASGI服务器加载您的应用程序时,Django需要导入设置模块——这是定义整个应用程序的地方。

Django使用 DJANGO_SETTINGS_MODULE 用于定位相应设置模块的环境变量。它必须包含指向设置模块的虚线路径。您可以对开发和生产使用不同的值;这完全取决于您如何组织设置。

如果未设置此变量,则默认 asgi.py 将它设置为 mysite.settings 在哪里 mysite 是项目的名称。

应用ASGI中间件

要应用ASGI中间件,或者在另一个ASGI应用程序中嵌入Django,可以包装Django的 application 对象中 asgi.py 文件。例如::

from some_asgi_library import AmazingMiddleware

application = AmazingMiddleware(application)