---
title: "如何使用 WSGI 进行部署"
version: 3.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/3.2/howto/deployment/wsgi/
canonical: https://djangodocs.dev/zh-hans/3.2/howto/deployment/wsgi/
---
# 如何使用 WSGI 进行部署

Django 的主要部署平台是 [WSGI](https://wsgi.readthedocs.io/en/latest/)，它是 Web 服务器和 Web 应用的 Python 标准。

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

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

- [如何使用 Gunicorn 托管 Django](/zh-hans/3.2/howto/deployment/wsgi/gunicorn/)
- [如何用 uWSGI 托管 Django](/zh-hans/3.2/howto/deployment/wsgi/uwsgi/)
- [如何使用 Apache 和 `mod_wsgi` 托管 Django](/zh-hans/3.2/howto/deployment/wsgi/modwsgi/)
- [Apache 利用 Django 的用户数据库进行验证](/zh-hans/3.2/howto/deployment/wsgi/apache-auth/)

## `application` 对象

用 WSGI 部署的关键是 `application` callable，应用服务器用它与你的代码交互。 `application` callable 一般以一个位于 Python 模块中，名为 `application` 的对象的形式提供，且对服务器可见。

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

Django 开发服务器和生产环境的 WSGI 部署都用到了它。

WSGI 服务器从其配置中获取 `application` callable 的路径。Django 的默认服务器（ [`runserver`](/zh-hans/3.2/ref/django-admin/#django-admin-runserver) 命令），从配置项 [`WSGI_APPLICATION`](/zh-hans/3.2/ref/settings/#std-setting-WSGI_APPLICATION) 中获取。默认值是 `<project_name>.wsgi.application`，指向 `<project_name>/wsgi.py` 中的 `application` callable。

## 配置 settings 模块

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

Django 利用 [`DJANGO_SETTINGS_MODULE`](/zh-hans/3.2/topics/settings/#envvar-DJANGO_SETTINGS_MODULE) 环境变量来定位合适的配置模块。它必须包含到配置模块的点式路径。开发环境和生产环境可以配置不同值；这都取决于你是如何组织配置的。

若未设置该变量， `wsgi.py` 默认将其设置为 `mysite.settings`， `mysite` 即工程名字。这就是 [`runserver`](/zh-hans/3.2/ref/django-admin/#django-admin-runserver) 默认的发现默认配置行为。

> **Note**
>
> 由于环境变量是进程级的，所以如果在同一进程运行多个 Django 站点将出错。这在使用 mod\_wsgi 时会出现。
>
> 要避免此问题，为每个站点在后台进程使用 mod\_wsgi 的后台模式，或者在 `wsgi.py` 中通过 `os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"` 重写来自环境变量的值。

## 应用 WSGI 中间件

要应用 WSGI 中间件 \<3333#middleware-components-that-play-both-sides\> \` 中间件组件，你只需简单包裹应用程序对象。举个例子，你可以在文件 :file:\`wsgi.py 末尾添加以下代码:

```
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
```

如果你想将 Django 应用于一个 WSGI 应用或其它框架联合起来，可以用自定义 WSGI 应用替换 Django 的 WSGI 应用，前者会在稍晚时候将任务委托给 WSGI 应用。
