除了WSGI,Django还支持在上部署 ASGI, 用于异步web服务器和应用程序的新兴Python标准。
贾戈 startproject
management命令为您设置一个默认的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库可能不会这样做。
当ASGI服务器加载您的应用程序时,Django需要导入设置模块——这是定义整个应用程序的地方。
Django使用 DJANGO_SETTINGS_MODULE
用于定位相应设置模块的环境变量。它必须包含指向设置模块的虚线路径。您可以对开发和生产使用不同的值;这完全取决于您如何组织设置。
如果未设置此变量,则默认 asgi.py
将它设置为 mysite.settings
在哪里 mysite
是项目的名称。
要应用ASGI中间件,或者在另一个ASGI应用程序中嵌入Django,可以包装Django的 application
对象中 asgi.py
文件。例如::
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)
12月 18, 2023