如何使用 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)