如何使用 ASGI 进行部署 — Django 文档

来自菜鸟教程
Django/docs/3.1.x/howto/deployment/asgi/index
跳转至:导航、​搜索

如何使用 ASGI 进行部署

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

Django 的 :djadmin:`startproject` 管理命令为你设置了一个默认的 ASGI 配置,你可以根据你的项目的需要进行调整,并指导任何符合 ASGI 的应用程序服务器使用。

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

application 对象

与 WSGI 一样,ASGI 让您提供一个 application 可调用对象,应用程序服务器使用它来与您的代码进行通信。 它通常作为服务器可访问的 Python 模块中名为 application 的对象提供。

:djadmin:`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 中间件,或将 Django 嵌入到另一个 ASGI 应用程序中,您可以将 Django 的 application 对象包装在 asgi.py 文件中。 例如:

from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)