如何使用 ASGI 部署

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

Django 的 startproject 管理命令会为你设置默认的 ASGI 配置,你可以根据项目需要对其进行调整,并指示任何兼容 ASGI 的应用程序服务器使用它。

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

application 对象

与 WSGI 类似,ASGI 要求你提供一个 application 可调用对象,应用程序服务器使用它与你的代码进行通信。它通常在 Python 模块中提供,名为 application,服务器可以访问该模块。

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 应用程序中,可以在 asgi.py 文件中包装 Django 的 application 对象。例如

from some_asgi_library import AmazingMiddleware

application = AmazingMiddleware(application)
返回顶部