# Django 3.2.11.dev 文档

# 如何使用 ASGI 来部署

同 WSGI 一样，Django 也支持使用 ASGI 来部署，它是为了支持异步网络服务器和应用而新出现的 Python 标准。

Django 的管理命令 `startproject` 生成了一个默认的 ASGI 配置，你可以按照自己项目的需要去调整这个配置，任何兼容 ASGI 的应用程序服务器都可以直接使用。

Django 提供了下面这些 ASGI 服务的入门文档：

- 如何使用 Daphne 托管 Django
- 如何使用 Hypercorn 托管 Django。
- 如何使用 Uvicorn 托管 Django

## `application` 对象

与WSGI类似，ASGI需要你提供 `application` 可以让应用程序服务器用它与你的代码交互。可调用的应用程序 `application` 一般以一个位于 Python 模块中，名为应用程序 `application` 的对象的形式提供，且对服务器可见。

`startproject` 命令创建了文件 `<project_name>/asgi.py`，其中包含了 `application` callable应用程序。

它不会被开发服务器使用 (`runserver`) ，但是可以在开发环境或生产环境中用任意一种ASGI服务器来使用。

ASGI服务器通常会以字符串形式获取可调用应用程序的路径；对于大多数Django项目来说，应用程序形如 `myproject.asgi:application` 。

警告

Django默认的ASGI处理器会将你所有的代码放在一个同步的线程内运行，但你如果选择运行自己的异步处理器，你必须确保它是异步安全的。

不要在异步代码中调用阻塞的同步函数或库。Django会阻止你这样异步不安全地使用Django的内容，但是对第三方应用程序或者Python库不一定会这样。

## 配置 settings 模块

当 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)