---
title: "如何使用 ASGI 来部署"
version: 4.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/4.2/howto/deployment/asgi/
canonical: https://djangodocs.dev/zh-hans/4.2/howto/deployment/asgi/
---
# 如何使用 ASGI 来部署

同 WSGI 一样，Django 也支持使用 [ASGI](https://asgi.readthedocs.io/en/latest/) 来部署，它是为了支持异步网络服务器和应用而新出现的 Python 标准。

Django 的管理命令 [`startproject`](/zh-hans/4.2/ref/django-admin/#django-admin-startproject) 生成了一个默认的 ASGI 配置，你可以按照自己项目的需要去调整这个配置，任何兼容 ASGI 的应用程序服务器都可以直接使用。

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

- [如何使用 Daphne 托管 Django](/zh-hans/4.2/howto/deployment/asgi/daphne/)
- [如何使用 Hypercorn 托管 Django。](/zh-hans/4.2/howto/deployment/asgi/hypercorn/)
- [如何使用 Uvicorn 托管 Django](/zh-hans/4.2/howto/deployment/asgi/uvicorn/)

## `application` 对象

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

[`startproject`](/zh-hans/4.2/ref/django-admin/#django-admin-startproject) 命令创建了文件 `<project_name>/asgi.py`，其中包含了 `application` callable应用程序。

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

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

> **Warning**
>
> Django默认的ASGI处理器会将你所有的代码放在一个同步的线程内运行，但你如果选择运行自己的异步处理器，你必须确保它是异步安全的。
>
> 不要在异步代码中调用阻塞的同步函数或库。Django会阻止你这样异步不安全地使用Django的内容，但是对第三方应用程序或者Python库不一定会这样。

## 配置 settings 模块

当 ASGI 服务器加载应用程序时，Django 需要导入配置模块——完整定义应用程序的地方。

Django 利用 [`DJANGO_SETTINGS_MODULE`](/zh-hans/4.2/topics/settings/#envvar-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)
```
