除了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中间件,或将Django嵌入到另一个ASGI应用程序中,您可以包装Django的 application
对象中的 asgi.py
文件。例如::
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)
5月 28, 2025