Django 的runserver只為開發環境提供了單進程的django服務器,這不能用於生產環境上。將我們的Django程序部署到產品服務器運行之前,我們可能還要關注下面提到的一些地方。
1.關閉Debug模式
使用django-admin.py startproject 生成的項目,默認settings.py中的DEBUG是開戶的,這在正式環境可能會帶來以下問題:
- 所有的數據庫查詢將被保存在內存中, 以 django.db.connection.queries 的形式. 你可以想象,這個吃內存!
- 任何404錯誤都將呈現django的特殊的404頁面,而不是普通的404頁面。 這個頁面包含潛在的敏感信息,但是不應暴露在公共互聯網。
- 你的應用中任何未捕獲的異常,從基本的python語法錯誤到數據庫錯誤以及模板語法錯誤都會返回漂亮的Django錯誤頁面。 這個頁面包含了比404錯誤頁面更多的敏感信息,所以這個頁面絕對不要公開暴露。
簡單的說,把DEBUG設置成True 相當於告訴Django你的網站只會被可信任的開發人員使用。 Internet里充滿了不可信賴的事物,當你准備部署你的應用時,首要的事情就是把DEBUG設置為False 。
2.關閉模板的Debug模式
類似地,你應該在生產環境中把TEMPLATE_DEBUG設置為False ,如果這個設為True ,為了在那個好看的錯誤頁面上顯示足夠的東西,Django的模版系統就會為每一個模版保存一些額外的信息。
3.實現404/500模板
如果DEBUG 設置為True ,Django會顯示那個自帶的404錯誤頁面。否則他會顯示一個在你的模版根目錄中名字叫404.html的模版 所以,當你准備部署你的應用時,你會需要創建這個模版並在里面放一些有意義的“頁面未找到”的信息。
類似地,500也是一樣的。
4.設置錯誤警報
當Django網站運行中出現了異常,我們會希望去了解以便於修正它。 默認情況下,Django在你的代碼引發未處理的異常時,發送一封Email至開發者團隊。但你需要去做兩件事來設置這種行為。
首先,改變你的ADMINS設置用來引入關注者的E-mail地址:
ADMINS=(
'devloper1', 'devloper1@example.com',
'devloper1', 'devloper2@example.com',
)
第二,確保你的服務器配置為發送電子郵件。 設置好postfix或sendmail等與Django設置相關的郵件服務器,你需要將 EMAIL_HOST設置為你的郵件服務器的正確的主機名. 默認模式下是設置為’localhost’。
5.設置連接中斷警報
如果你安裝有CommonMiddleware,你就具有了設置這個選項的能力:有人在訪問你的Django網站的一個非空的鏈接而導致一個404錯誤的發生和連接中斷的情況,你將收到一封郵件。
如果你想激活這個特性,設置SEND_BROKEN_LINK_EMAILS 為True(默認為False),並設置你的MANAGERS為關注者的郵件地址,這些郵件地址將會收到報告連接中斷錯誤的郵件。
MANAGERS=(
'devloper1', 'devloper1@example.com',
'devloper1', 'devloper2@example.com',
)
6.不同環境的settings配置
從上面提到的一些信息(不僅僅是上面一些信息)我們可以看出,在開發環境、測試環境和正式環境我們可能需要不同的配置,怎樣避免在不同的環境產生的代碼不一致呢。
- 設置成兩個全面的,彼此獨立的配置文件
- 設置一個基本的配置文件(比如,為了開發)和第二個(為了產品)配置文件,第二個配置文件僅僅從基本的那個配置文件導入配置,並對需要定義的進行復寫.
- 使用一個單獨的配置文件,此配置文件包含一個Python的邏輯判斷根據上下文環境改變設置。
這里只拿第三種方式舉個小例子:
# settings.py
import socket
if socket.gethostname() == 'my‐laptop':
DEBUG = TEMPLATE_DEBUG = True
else:
DEBUG = TEMPLATE_DEBUG = False
# ...
我們需要記住,DJANGO_SETTINGS_MODULE環境變量指定了我們應用程序的入口,它指定的settings里的URLConf完成核心控制器功能。
Django真正的部署方案(后續學習分享):
- apache+mod_python
- apache+mod_wsgi
- fastCGI+flup+manage.py
- apache+fastCGI+mod_rewrite
- fastCGI+lighttpd+mod_fastcgi