otherhtml
IISDjango配置管理Python應用服務器 python
早就據說過django開發框架的大名,一直想找個機會體驗一下。因爲公司使用的服務器系統是winows server 2003,web服務器是iis 6.0,所以,開發環境只能部署爲django+iis。因而,上google狂找,所能找到的教程不多,並且不少雷同無異,只能擇一照着配置,仍未能運行。幾經周折,始終未遂。web
今天閒來無事,又有了配置django+iis運行環境的衝動。又嘗試之,好在黃天不負有心人,得以所償。附上所參考的教程。django
在Windows平臺上的IIS服務器中發佈由Django建立的應用。在咱們開始以前請確保你已經安裝完畢Windows,IIS,並能正常運行,須要發佈的Django應用也已在內置的測試服務器上調試經過。api
注意:本指南對Django <=0.91無效,由於IIS擴展基於Django >=0.92的API緩存
安裝PyISAPIe - 一個讓IIS支持Python的擴展安全
安裝Django並經過PyISAPIe鏈接Django服務器
配置Django網絡
測試app
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或其餘變體,那樣將沒法正常運行。
你不必定要建立虛擬目錄——能夠直接使用根目錄。若是你使用虛擬目錄,好比/myfolder,那麼只有以/myfolder開頭的頁面由 PyISAPIe處理。若是你使用根目錄,全部的URL都將由PyISAPIe處理,這可能會致使你站點上的其餘內容沒法訪問。 * 打開IIS管理控制檯,建立新的虛擬目錄,並在嚮導提示的時候容許ISAPI擴展。
察看虛擬目錄的屬性並點擊「配置」(若是這個選項爲灰色,則先點擊「建立」),而後加入一個新通配符(下方的列表框內),定位到 pyisapie.dll 文件,清除「檢查文件是否存在」選項。
在IIS管理器中,到「網絡服務擴展」區右鍵點擊->加入新的網絡服務擴展。
隨便取一個名字,而後將pyisapie.dll添加爲所需文件,並選中容許此擴展
IIS 5.x 不支持通配符應用映射,至少在配置界面下不支持。在IIS 5下,實施步驟以下:
右鍵點擊虛擬目錄並選擇「屬性」
確保「執行許可」設置爲「腳本和可執行程序」
點擊「配置」(在「腳本和可執性程序」旁)
點擊「應用程序映射」標籤,選擇「添加」
設置「可執行文件」爲 c:\python24\PyISAPIe.dll
設置「擴展名」爲「*」,這樣全部的請求都經過PyISAPIe.dll處理
你應該限定所容許的動做,可是爲了內部測試方便,咱們暫時設置爲「所有動做」
清除「檢查文件是否存在」的選項
點擊「肯定」關掉全部窗口
設置好以後,你能夠將 c:\pyisapie\source\PyISAPIe\Python\examples 下的Info.py複製到你新建的虛擬目錄中,而後訪問http://site/Info.py來測試。
按照PyISAPIe的examples\django目錄下的readme.txt來設置Django。簡要的說就是將兩個文件複製到相應的文件夾中。而後稍加修改以知足你的須要。
將 Isapi.py 放到 c:\python24\lib\site-packages\Http 目錄。按照前面給的例子,你須要對此文件稍加修改:
改動的代碼
# 加入下列兩行,這樣python能夠導入 DJANGO_SETTINGS_MODULE import sys sys.path.append(r'c:\test') # Indicate the settings module of your project os.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站點。
作完上述幾步以後,咱們能夠將虛擬目錄 /myfolder 指向 c:\test,而後建立一個Hello World 頁面來進行測試。
在 c:\test\proj 目錄中建立一個 helloworld.py 文件
內容以下
from django.http import HttpResponse def 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」 虛擬目錄來提供樣式表等靜態內容。