如何使用 ASGI 进行部署 — Django 文档
如何使用 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)