如何使用 ASGI 部署

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

Django 的 startproject 管理命令会为你设置默认的 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 库,情况可能并非如此。

配置 settings 模块

当 ASGI 服务器加载你的应用程序时,Django 需要导入 settings 模块——你的整个应用程序都在这里定义。

Django 使用 DJANGO_SETTINGS_MODULE 环境变量来查找相应的 settings 模块。它必须包含 settings 模块的点分路径。你可以为开发和生产使用不同的值;这完全取决于你如何组织你的 settings。

如果未设置此变量,则默认的 asgi.py 将其设置为 mysite.settings,其中 mysite 是你的项目名称。

应用 ASGI 中间件

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

from some_asgi_library import AmazingMiddleware

application = AmazingMiddleware(application)
返回顶部