IIS无法通过PyISAPIe链接到Django

3 投票
2 回答
1700 浏览
提问于 2025-04-15 21:36

我正在尝试在一个基于IIS的服务器上运行Django网站。我按照主网站上的所有说明进行了操作(http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer),并且还参考了一篇很好的文章(http://www.messwithsilverlight.com/2009/11/django-on-windows-server-2003-and-iis6/)来确认我的步骤。

我成功地设置了IIS来读取.py文件。按照主要的说明,我可以让服务器渲染Info.py这个文件。然而,我似乎无法让IIS和Django正常配合。例如,如果我的虚拟目录是“abc”,那么当我访问“localhost/abc/”时,浏览器只会显示该文件夹的内容目录。此外,如果我设置了URL,使得“/dashboard/1”应该带我到某个特定页面,但输入“localhost/abc/dashboard/1”却出现了“页面无法显示”的错误。

我相当确定IIS根本没有引用或与Django进行交互。有没有人知道该如何解决这个问题?

谢谢

2 个回答

0

用任何网络服务器来运行Django,基本上有三个关键点:

  1. 告诉网络服务器:“我想让你提供这个模块的内容,这个模块会调用Python。”
  2. 告诉Python模块:“我想让你用这个文件里的信息来执行Python代码。”
  3. 告诉这个文件:“我想让你使用Django。”

如果你在虚拟目录中看到的是目录列表,那说明你需要检查一下虚拟目录的设置,确保PyISAPIe已经为那个目录配置好了(关键点#1)。

根据你提到的文章:

  • 打开IIS管理控制台,创建一个新的虚拟目录,并在向导提示时允许执行ISAPI扩展。

    • 查看新文件夹的属性,点击“配置”按钮(如果是灰色的,先点击“创建”),然后添加一个新的通配符扩展(下方的框),找到pyisapie.dll文件,并取消勾选“检查文件是否存在”的选项。

    • 在IIS管理器中,找到“Web服务扩展”部分,右键点击 -> 添加新的Web服务扩展。

  • 给它起个名字(随便什么都行),把pyisapie.dll文件添加为必需文件,并勾选将扩展状态设置为允许的选项。

2

以下是我遵循的原始步骤,

基本步骤:https://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer,附加提示:http://whelkaholism.blogspot.ca/

  1. 首先,你需要安装 Python 2.5 或 2.6,如果你想用 2.7,就需要重新编译 PyISAPIe,但我没有这样做。可以在这里下载:http://www.python.org/ftp/python/2.6/python-2.6.msi
  2. 你需要安装与 Python 解释器版本匹配的 PyISAPIe 版本,如果不匹配,会失败。可以在这里找到:http://sourceforge.net/projects/pyisapie/files/pyisapie/
  3. 把上一步提取的文件夹移动到一个合适的位置(比如 C: 盘)
  4. 你需要更改 PyISAPIe.dll 的安全设置,他们建议设置为网络服务可读,但我设置为所有人,以确保没有问题
  5. 然后你需要剪切并粘贴(很重要)PyISAPIe 的 Http 文件夹到你的 Python 安装目录下的 Lib\Site-Packages 文件夹中
  6. 接下来,设置 IIS(在运行中输入 inetmgr 打开管理器(按下 Windows 键 + R)):
    • 添加一个新的虚拟目录,并在向导提示时允许执行 ISAPI 扩展
    • 在虚拟目录的属性中添加一个新的通配符扩展,取消勾选文件存在设置
    • 在 IIS 管理器中添加 Web 服务扩展,指向 dll,确保它被允许
  7. 从 PyISAPIe 文件夹中,复制 examples\django\Isapi.py,并粘贴到 Lib\Site-Packages\Http 中
  8. 在 Isapi.py 中,设置路径(例如 c:\inetpub\wwwroot\ web_site\ django_project)和 DJANGO_SETTINGS_MODULE(例如 django_app .settings)
  9. 每次对文件进行更改后,在命令提示符中使用 iisreset 来应用更改

这里还有一些你可能需要做的事情

  • 确保你的数据库文件路径(如果使用 sqlite)是正确的
  • 模板位置设置也要做同样的检查
  • 在你的 urls 和 html 文件中,确保路径以你给虚拟目录别名的名称开头(例如在我们的例子中是 web_site

最后,你可能会遇到提供 CSS 时的困难。如果有任何问题,请告诉我,我会更新我的帖子。

撰写回答