在Windows平台下的IIS中發布Django應用

來源:互聯網
上載者:User
文章目錄
  • 安裝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服務。

常見問題
  • 在 IIS 5 上,每一次修改代碼後,你需要在控制台下用命令 “iisreset” 重啟IIS才能讓它生效。直接在”IIS 管理主控台”下重新啟動網站是沒有效果的,一定要重啟整個IIS服務。

  • 最好在根目錄下建立一個 “media” 虛擬目錄來提供樣式表等靜態內容。

原文參考
  • DjangoOnWindowsWithIISAndSQLServer
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.