在Windows平台上的IIS服务器中发布由Django创建的应用。在我们开始之前请确保你已经安装完毕Windows,IIS,并能正常运行,需要发布的Django应用也已在内置的测试服务器上调试通过。
注意:本指南对Django <=0.91无效,因为IIS扩展基于Django >=0.92的API
PyISAPIe不是以安装包的形式发布的,不过安装起来也并不复杂
简单地说,这个扩展在IIS运行时将Python解释器加载到内存中并用它来响应页面请求,它避免了CGI方式下为每一个请求反复启动Python。这意味着某些Django文件会被缓存,在你修改代码后不能马上起效,直到你重启Python进程。对于IIS 6你必须右键点击应用程序池中的服务然后选择”刷新”来让更改有效,对于更早的IIS版本你也许需要重新启动整个IIS服务。
好,那我们先访问http://pyisapie.sourceforge.net/并下载最新的PyISAPIe。
假设你将所有的文件解压到c:\pyisapie,并且将Python安装在c:\python24,如果路径不同,请作相应的调整。
在readme中有文档说明,步骤概括如下:
你不一定要创建虚拟目录——可以直接使用根目录。如果你使用虚拟目录,比如/myfolder,那么只有以/myfolder开头的页面由PyISAPIe处理。如果你使用根目录,所有的URL都将由PyISAPIe处理,这可能会导致你站点上的其他内容无法访问。 * 打开IIS管理控制台,创建新的虚拟目录,并在向导提示的时候允许ISAPI扩展。
设置好之后,你可以将 c:\pyisapie\source\PyISAPIe\Python\examples 下的Info.py复制到你新建的虚拟目录中,然后访问http://site/Info.py来测试。
按照PyISAPIe的examples\django目录下的readme.txt来设置Django。简要的说就是将两个文件复制到相应的文件夹中。然后稍加修改以满足你的需要。
改动的代码
# 加入下列两行,这样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"
改动的代码
class PyISAPIeRequest(http.HttpRequest):
def __init__(This):
# 加入下一行
This.method = Env.REQUEST_METHOD
# 其他的不必修改
做完上述几步之后,我们可以将虚拟目录 /myfolder 指向 c:\test,然后创建一个Hello World 页面来进行测试。
内容如下
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world!")
内容如下
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” 虚拟目录来提供样式表等静态内容。