# 如何使用WSGI 部署 #
Django 首要的部署平臺是[WSGI](http://www.wsgi.org/),它是Python Web 服務器和應用的標準。
Django 的`startproject` 管理命名為你設置一個簡單的默認WSGI 配置,你可以根據你項目的需要做調整并指定任何與WSGI 兼容的應用服務器使用。
Django 包含以下WSGI 服務器的入門文檔:
+ [如何使用Apache 和mod_wsgi 部署Django](http://python.usyiyi.cn/django/howto/deployment/wsgi/modwsgi.html)
+ [從Apache 中利用Django 的用戶數據庫進行認證](http://python.usyiyi.cn/django/howto/deployment/wsgi/apache-auth.html)
+ [如何使用Gunicorn 部署Django (100%)](http://python.usyiyi.cn/django/howto/deployment/wsgi/gunicorn.html)
+ [如何使用uWSGI 部署Django (100%)](http://python.usyiyi.cn/django/howto/deployment/wsgi/uwsgi.html)
## application 對象 ##
使用WSGI 部署的核心概覽是`application` 可調用對象,應用服務器使用它來與你的代碼進行交換。在Python 模塊中,它通常一個名為`application` 的對象提供給服務器使用。
`startproject` 命令創建一個`<project_name>/wsgi.py` 文件,它就包含這樣一個`application` 可調用對象。
它既可用于Django 的開發服務器,也可以用于線上WSGI 的部署。
WSGI 服務器從它們的配置中獲得`application` 可調用對象的路徑。Django 內建的服務器,叫做`runserver` 和`runfcgi` 命令,是從`WSGI_APPLICATION` 設置中讀取它。默認情況下,它設置為`<project_name>.wsgi.application`,指向`<project_name>/wsgi.py` 中的`application` 可調用對象。
## 配置settings 模塊 ##
當WSGI 服務器加載你的應用時,Django 需要導入settings 模塊 —— 這里是你的全部應用定義的地方。
Django 使用`DJANGO_SETTINGS_MODULE` 環境變量來定位settings 模塊。它包含settings 模塊的路徑,以點分法表示。對于開發環境和線上環境,你可以使用不同的值;這完全取決于你如何組織你的settings。
如果這個變量沒有設置,默認的`wsgi.py` 設置為`mysite.settings`,其中`mysite` 為你的項目的名稱。這是`runserver` 如何找到默認的`settings` 文件的機制。
> 注
>
> 因為環境變量是進程范圍的,當你在同一個進程中運行多個Django 站點時,它將不能工作。使用`mod_wsgi` 就是這個情況。
>
> 為了避免這個問題,可以使用mod_wsgi 的守護進程模式,讓每個站點位于它自己的守護進程中,或者在`wsgi.py`中通過強制使用`os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"` 來覆蓋這個值。
## 運用WSGI 中間件 ##
你可以簡單地封裝application 對象來運用 [WSGI 中間件](https://www.python.org/dev/peps/pep-3333/#middleware-components-that-play-both-sides)。 例如,你可以在`wsgi.py` 的底下添加以下這些行:
```
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
```
如果你結合使用 Django 的application 與另外一個WSGI application 框架,你還可以替換Django WSGI 的application 為一個自定義的WSGI application。
> 注
>
> 某些第三方的WSGI 中間件在處理完一個請求后不調用響應對象上的`close` —— most notably Sentry’s error reporting middleware up to version 2.0.7。這些情況下,不會發送`request_finished` 信號。這可能導致數據庫和memcache 服務的空閑連接。
‍
> 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[WSGI servers](https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架