官方文档:https://docs.djangoproject.com/en/3.2/releases/3.0/
Django 3.0 通过提供对作为ASGI应用程序运行的支持,开始了我们使 Django 完全具有异步能力的旅程。
Django 3.1于2020年8月4日发布!从3.1版本开始,Django将逐步原生支持异步,比如异步视图和中间件。
python兼容性:
Django 3.1 支持 Python 3.6、3.7、3.8 和 3.9(从 3.1.3 开始)。官方强烈推荐并且只正式支持每个系列的最新版本
从创建Django项目目录来看,可以看出多出一个 asgi.py
文件,:
asgi.py
,从django.core.asgi
中导入 get_asgi_application
,支持异步
import osfrom django.core.asgi import get_asgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django3_asyncio.settings')application = get_asgi_application()
wsgi.py
, 从django.core.wsgi
中导入 get_wsgi_application
,多线程
import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django3_asyncio.settings')application = get_wsgi_application()
注意:两者只是导入不同的方法。然后用不同的方式启动项目
1. 异步视图
1.1 async def
要开始使用异步视图,您需要使用以下命令声明一个视图 :async def
import asyncio
from django.http import HttpResponseasync def my_view(request):await asyncio.sleep(3)return HttpResponse('Hello Django asyncio!')
1.2 ASGI部署
除了 WSGI,Django 还支持在ASGI 上部署,ASGI是用于异步 Web 服务器和应用程序的新兴 Python 标准 。
Django 的startproject
管理命令会为您设置默认的 ASGI 配置 。
1.2.1 Daphne
当前的 ASGI 参考服务器,用 Twisted 编写并作为 Django Channels 项目的一部分进行维护。支持 HTTP/1、HTTP/2 和 WebSockets。
安装:
pip install daphne
启动项目:
# 进入项目目录,确保从与您的manage.py文件相同的目录中运行此命令。
daphne <项目名称>.asgi:application
1.2.2 Uvicorn
基于 uvloop 和 httptools 的快速 ASGI 服务器。支持 HTTP/1 和 WebSockets。
安装:
pip install uvicorn gunicorn
启动项目:
安装 Uvicorn 后,可以使用一个uvicorn
命令来运行 ASGI 应用程序。Uvicorn 需要使用包含 ASGI 应用程序对象的模块的位置来调用,然后是应用程序的名称(用冒号分隔)。
# 进入项目目录,确保从与您的manage.py文件相同的目录中运行此命令。
gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker
1.2.3 Hypercorn
基于 sans-io hyper、h11、h2 和 wsproto 库的 ASGI 服务器。支持 HTTP/1、HTTP/2 和 WebSockets。
安装:
pip install hypercorn
启动项目:
安装 Hypercorn 后,hypercorn
可以使用运行 ASGI 应用程序的命令。Hypercorn 需要使用包含 ASGI 应用程序对象的模块的位置来调用,然后是应用程序的名称(用冒号分隔)。
# 进入项目目录,确保从与您的manage.py文件相同的目录中运行此命令。
hypercorn myproject.asgi:application