如何使用ASGI部署

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

姜戈的 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处理程序将在同步线程中运行您的所有代码,但如果您选择运行自己的Expressc处理程序,则必须注意Express-safe。

不要在任何Expressc代码中调用阻塞同步函数或库。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)