文章目錄
- 安裝PyISAPIe - 一個IIS的ISAPI擴充
- 將Django串連到PyISAPIe
- 修改Django設定
- 原文參考
目標
在Windows平台上的IIS伺服器中發布由Django建立的應用。在我們開始之前請確保你已經安裝完畢Windows,IIS,並能正常運行,需要發布的Django應用也已在內建的測試伺服器上調試通過。
注意:本指南對Django <=0.91無效,因為IIS擴充基於Django >=0.92的API
步驟
- 安裝PyISAPIe - 一個讓IIS支援Python的擴充
- 安裝Django並通過PyISAPIe串連Django
- 配置Django
- 測試
安裝PyISAPIe - 一個IIS的ISAPI擴充
PyISAPIe不是以安裝包的形式發布的,不過安裝起來也並不複雜
簡單地說,這個擴充在IIS運行時將Python解譯器載入到記憶體中並用它來響應頁面請求,它避免了CGI方式下為每一個請求反覆啟動Python。這意味著某些Django檔案會被緩衝,在你修改代碼後不能馬上起效,直到你重啟Python進程。對於IIS 6你必須右鍵點擊應用程式集區中的服務然後選擇”重新整理”來讓更改有效,對於更早的IIS版本你也許需要重新啟動整個IIS服務。
好,那我們先訪問http://pyisapie.sourceforge.net/並下載最新的PyISAPIe。
假設你將所有的檔案解壓到c:\pyisapie,並且將Python安裝在c:\python24,如果路徑不同,請作相應的調整。
在readme中有文檔說明,步驟概括如下:
安裝檔案
- 將 c:\pyisapie\PyISAPIe.dll 複製到 c:\python24\
- 編輯該檔案的“屬性”->“安全設定”,加入“Network”,“ Service”,並選中“讀取”許可權。(為了讓IIS可以訪問)
- 轉到 c:\pyisapie\source\PyISAPIe\Python\ 將整個Http檔案夾複製到 c:\python24\lib\site-packages。 注意:Http檔案夾的名字是大小寫敏感的,千萬別誤存為http或其他變體,那樣將無法正常運行。
設定IIS
你不一定要建立虛擬目錄——可以直接使用根目錄。如果你使用虛擬目錄,比如/myfolder,那麼只有以/myfolder開頭的頁面由PyISAPIe處理。如果你使用根目錄,所有的URL都將由PyISAPIe處理,這可能會導致你網站上的其他內容無法訪問。 * 開啟IIS管理主控台,建立新的虛擬目錄,並在嚮導提示的時候允許ISAPI擴充。
IIS 6
- 察看虛擬目錄的屬性並點擊“配置”(如果這個選項為灰色,則先點擊“建立”),然後加入一個新萬用字元(下方的列表框內),定位到 pyisapie.DLL 檔案,清除“檢查檔案是否存在”選項。
- 在IIS管理器中,到“網路服務擴充”區右鍵點擊->加入新的網路服務擴充。
- 隨便取一個名字,然後將pyisapie.dll添加為所需檔案,並選中允許此擴充
IIS 5
- IIS 5.x 不支援萬用字元應用映射,至少在配置介面下不支援。在IIS 5下,實施步驟如下:
- 右鍵點擊虛擬目錄並選擇“屬性”
- 確保“執行許可”設定為“指令碼和可執行程式”
- 點擊“配置”(在“指令碼和可執性程式”旁)
- 點擊“應用程式對應”標籤,選擇“添加”
- 設定“可執行檔”為 c:\python24\PyISAPIe.dll
- 設定“副檔名”為“*”,這樣所有的請求都通過PyISAPIe.dll處理
- 你應該限定所允許的動作,但是為了自我裝載方便,我們暫時設定為“全部動作”
- 清除“檢查檔案是否存在”的選項
- 點擊“確定”關掉所有視窗
設定好之後,你可以將 c:\pyisapie\source\PyISAPIe\Python\examples 下的Info.py複製到你建立的虛擬目錄中,然後訪問http://site/Info.py來測試。
將Django串連到PyISAPIe
按照PyISAPIe的examples\django目錄下的readme.txt來設定Django。簡要的說就是將兩個檔案複製到相應的檔案夾中。然後稍加修改以滿足你的需要。
- 將 Isapi.py 放到 c:\python24\lib\site-packages\Http 目錄。按照前面給的例子,你需要對此檔案稍加修改:
改動的代碼
# 加入下列兩行,這樣python可以匯入 DJANGO_SETTINGS_MODULEimport syssys.path.append(r'c:\test')# Indicate the settings module of your projectos.environ["DJANGO_SETTINGS_MODULE"] = "proj.settings"
- 將 pyisapie.py 放到 c:\python24\lib\site-packages\Django-xyz-123.egg\django\core\handlers 目錄。PyISAPIe v1.0.3中有個小bug。 你需要對它稍加修改才能正常使用。
改動的代碼
class PyISAPIeRequest(http.HttpRequest):def __init__(This):# 加入下一行This.method = Env.REQUEST_METHOD# 其他的不必修改
- IIS+Python+PyISAPIe目前好像並不支援多個Django網站。
修改Django設定
做完上述幾步之後,我們可以將虛擬目錄 /myfolder 指向 c:\test,然後建立一個Hello World 頁面來進行測試。
- 在 c:\test\proj 目錄中建立一個 helloworld.py 檔案
內容如下
from django.http import HttpResponsedef index(request):return HttpResponse("Hello world!")
- 修改 c:\test\proj 目錄下的 urls.py
內容如下
from django.conf.urls.defaults import *urlpatterns = patterns('',# Example:# (r'^newtest/', include('proj.apps.foo.urls.foo')),(r'^.*$', 'proj.helloworld.index'),# Uncomment this for admin:# (r'^admin/', include('django.contrib.admin.urls')),)
一切準備就緒,你可以馬上訪問 http://site/myfolder 來看一下效果。請注意,你不需要手動啟動Django服務。
常見問題
原文參考
- DjangoOnWindowsWithIISAndSQLServer