除了WSGI,Django還支持在ASGI上進行部署,ASGI是用于異步Web服務(wù)器和應用程序的新興Python標準。
Django的startproject管理命令為您設(shè)置了一個默認的ASGI配置,您可以根據(jù)項目的需要對其進行調(diào)整,并指導任何符合ASGI的應用服務(wù)器使用。
Django包括以下ASGI服務(wù)器的入門文檔:
與WSGI一樣,ASGI也為您提供了一個application可調(diào)用對象,應用程序服務(wù)器使用該可調(diào)用對象與您的代碼進行通信。通常application以在服務(wù)器可訪問的Python模塊中命名的對象的形式提供。
該startproject命令將創(chuàng)建一個/asgi.py包含此類application可調(diào)用文件的文件 。
開發(fā)服務(wù)器(runserver)不會使用它,但是任何ASGI服務(wù)器都可以在開發(fā)或生產(chǎn)中使用它。
ASGI服務(wù)器通常采用可調(diào)用的應用程序路徑作為字符串。對于大多數(shù)Django項目,它看起來像myproject.asgi:application。
警告:盡管Django的默認ASGI處理程序?qū)⒃谕骄€程中運行所有代碼,但如果您選擇運行自己的異步處理程序,則必須注意異步安全性。
不要在任何異步代碼中調(diào)用阻塞同步函數(shù)或庫。Django禁止您使用非異步安全的Django部分執(zhí)行此操作,但第三方應用程序或Python庫可能并非如此。
當ASGI服務(wù)器加載您的應用程序時,Django需要導入設(shè)置模塊-定義整個應用程序的位置。
Django使用 DJANGO_SETTINGS_MODULE環(huán)境變量以找到適當?shù)脑O(shè)置模塊。它必須包含指向設(shè)置模塊的虛線路徑。您可以將不同的值用于開發(fā)和生產(chǎn)。這完全取決于您如何組織設(shè)置。
如果未設(shè)置此變量,則默認asgi.py將其設(shè)置為 mysite.settings,其中mysite是項目的名稱。
要應用ASGI中間件,或?qū)jango嵌入另一個ASGI應用程序中,可以將Django的application對象包裝在asgi.py文件中。例如:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)
Daphne是用于UNIX的純Python ASGI服務(wù)器,由Django項目的成員維護。它充當ASGI的參考服務(wù)器。
您可以使用以下命令安裝Daphne pip:
python -m pip install daphne
安裝Daphne后,將daphne提供一個命令來啟動Daphne服務(wù)器進程。最簡單的說,需要使用包含ASGI應用程序?qū)ο蟮哪K的位置來調(diào)用Daphne,然后是調(diào)用該應用程序的位置(用冒號分隔)。
對于典型的Django項目,調(diào)用Daphne如下所示:
daphne myproject.asgi:application
這將開始監(jiān)聽一個進程127.0.0.1:8000。它要求您的項目位于Python路徑上;確保從與manage.py文件相同的目錄中運行此命令。
Uvicorn是基于uvloop和的ASGI服務(wù)器httptools,著重于速度。
您可以使用以下命令安裝Uvicorn pip:
python -m pip install uvicorn
安裝Uvicorn后,將uvicorn提供運行ASGI應用程序的命令。必須使用包含ASGI應用程序?qū)ο蟮哪K的位置來調(diào)用Uvicorn,然后再調(diào)用該應用程序(由冒號分隔)。
對于一個典型的Django項目,調(diào)用Uvicorn如下所示:
uvicorn myproject.asgi:application
這將開始監(jiān)聽一個進程127.0.0.1:8000。它要求您的項目位于Python路徑上;確保從與manage.py文件相同的目錄中運行此命令。
有關(guān)更多高級用法,請閱讀Uvicorn文檔。
詳情參考: https://docs.djangoproject.com/en/3.0/
更多建議: