在Windows平台下的IIS中发布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_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站点。

修改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” 虚拟目录来提供样式表等静态内容。

原文参考

你可能感兴趣的:(windows)