在 IIS 上安装 Django:分步教程
已发表: 2022-03-11尽管许多 Django 开发人员可能认为它是亵渎神明的,但有时实际上有必要在 Windows/IIS 上部署 Django 应用程序,尤其是在使用基于 Windows 生态系统基础设施的客户端时。 “亵渎”部分来自 Django 真正针对 Unix 环境,严重依赖于 WSGI、FastCGI 和命令行工具等功能,所有这些对 Windows 来说都是陌生的。 幸运的是,由于在等式的 Windows 和 Python+Django 方面都增加了功能(否则这将是一个杂项),Django/IIS 的兼容性正在提高,从而有助于解决这两个不同技术世界之间的兼容性问题。
这个简短、重点突出的教程将引导您完成 Windows 上 Django 项目的基本设置。 它涵盖了 Python、Django 和相关工具的安装,包括独立运行和作为 FastCGI 服务器运行 Django 项目。 顺便说一句,后者变得越来越重要,因为 IIS 现在正式支持 FastCGI(在 IIS 7+ 上,只需安装 CGI 功能)。
注意:本教程适用于对 Windows 有所了解并熟悉 IIS 管理控制台的人员。 本教程中使用的 IIS 版本为 8.5,但描述和技术与早期版本类似。 本教程基于 Python 2.7 和 Django 1.7,因为这些是我用于项目的版本。 你可以在这里找到另一个 Django 教程。
专业提示:如果您要部署多个 Django(甚至是纯 Python)项目,或者如果您是开发人员,您应该查看 virtualenv,这是一个用于创建隔离 Python 环境的工具。
在 Windows 上安装 Python
首先,下载 Python。 提供了 32 位和 64 位 MSI 安装程序,您应该选择适合您正在安装的机器的安装程序。
PIP 是安装和维护 Python 库的工具(其中 Django 只是一个示例)。 它是通过在命令提示符下运行pip命令来调用的。 它实现了几个子命令,其中两个最有用的是install和freeze 。 如果项目有任何依赖项,PIP 还将安装项目依赖项(附加库)。
运行pip install <package_name>将下载并安装包及其所有依赖项(可能是嵌套的并且相当复杂)。 运行pip install --upgrade <package_name>同样会将现有软件包升级到其最新版本。 PIP 支持一种特殊的语法来安装包的精确版本,而不仅仅是“最新版本”。 它是通过在包名后面附加一个操作符和一个版本号来完成的; 例如“Jinja2==2.7.3”(安装精确版本)或“six>=1.8”(安装等于或大于指定版本号的任何版本)。
运行pip freeze只是以pip install可以直接使用的格式显示当前安装的软件包列表。
请注意,一些 Python / PIP 包附带用 C 编写的库,必须对其进行编译才能使包工作。 除非您将系统设置为具有与 Python 可执行文件兼容的工作 C 编译器,否则您将无法安装此类包。 Django 是一个纯 Python 库,因此不需要安装 C 编译器。
安装 Python 2.7.9 或更高版本很重要,因为从 2.7.9 开始的 Python 版本包括 PIP,即 Python 库/包/软件管理器,用于安装本教程中的所有其他内容。
安装过程非常简单明了。 它将提供在C:\Python27
目录中安装 Python,您应该接受它,因为它使以后的生活更轻松。 尽量不要屈服于 Windows 将东西安装在名称中带有空格的目录中的习惯。
安装后的基本目录将包含大约 8 个子目录、一些杂项文件和两个名为Python.exe
和PythonW.exe
的可执行文件。 前者是默认的命令行解释器和 Python shell,而后者只是解释器,调用时不会使用(或生成)控制台窗口,因此适合运行 GUI Python 应用程序。
接下来,应将 Python 添加到系统的 PATH 环境变量中。 这是在Advanced选项卡中的Advanced System Settings (或System Properties )中完成的,方法是单击Environment Variables按钮。 有两个目录要添加: C:\Python27
和C:\Python27\Scripts
。 这些应附加到 PATH 列表中,用分号 ( ;
) 分隔。 PATH 变量的结尾应类似于;C:\Python27;C:\Python27\Scripts
。
专业提示:您可能还想安装 GOW,这是一个轻量级的 Unix 命令行实用程序集合,类似于 Cygwin。 它将为您提供诸如
ls
之类的工具,以及诸如make
、wget
、curl
、ssh
、scp
、gzip
和tar
之类的更有趣的工具。
在 Windows 上安装 Django
可以使用 PIP 和诸如pip install django
之类的命令来安装 Django。 如果您的系统上尚不存在这些依赖项,则该过程可能会引入一些额外的依赖项。 否则,它将仅安装 Django,输出类似于以下内容:
Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...
您可以通过启动新的 Windows 命令提示符、运行python
命令并在 Python 提示符下输入import django
命令来检查 Python 和 Django for Windows 是否都在工作。 如果运行正常, import django
命令后应该没有输出或消息; IE:
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>
在 Windows 上安装 Django 项目
一个 Django“项目”由一个或多个“应用程序”组成。 项目的顶级目录通常包含一个特殊的项目子目录,其中包含设置和一些通用项目级信息,每个应用程序一个子目录,以及一个名为manage.py
的命令行脚本。 例如:
C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free
Django 项目可以通过归档整个项目目录并在另一台机器上解压缩来简单地分发。 在上面的示例中,项目包含project
子目录、名为djangoapp
的应用程序目录和辅助templates
子目录。
manage.py
脚本是 Django 应用程序的“瑞士军刀”。 它可以完成从创建新应用程序到数据库迁移,再到运行测试(嵌入式)HTTP 服务器甚至是 FastCGI 服务器的所有工作。
运行测试 HTTP 服务器
如果项目及其应用程序正常运行,您应该能够通过运行命令manage.py runserver
来启动默认的 Django 仅开发 HTTP 服务器,这应该会产生类似于以下内容的输出:
C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
正如您从消息中看到的,这会在 localhost 端口 8000 上启动一个服务器。您可以使用 Web 浏览器立即访问它。

配置和运行 FastCGI 服务器
一个更有趣的选项是启用 FastCGI 服务器。 使用 FastCGI,您可以使用 IIS、Apache 或任何其他 Web 服务器在生产环境中为应用程序提供服务。 为此,您需要下载 fcgi.py(通过 FastCGI 使用 IIS 在 Windows 上运行 Django 的 Django 管理命令)并将其放入 Django 应用程序(不是项目!)子目录的management/commands
子目录中。 management
和commands
子目录都必须有一个名为__init__.py
的空文件(它将这些目录转换为 Python 模块)。
fcgi.py
是一个非常简单和简约的 WSGI 到 FastCGI 适配器,它不支持侦听 TCP 套接字或管道,并且通过使用stdin
和 stdout` 完成所有处理。 因此,它不适用于 nginx 等现代 Web 服务器,但可以用于 IIS。
配置 IIS 以运行 FastCGI 应用程序
如果在 IIS 中加载了 FastCGI 模块(或者只是 IIS 7+ 中的 CGI 模块),则 IIS 管理控制台将显示“FastCGI 设置”图标。 Django 是一个具有自己的 URL 路由的框架,因此必须将 Django 应用程序作为特定路径的“处理程序”安装在 IIS 中。 要在 IIS 的默认网站上安装 Django 应用程序,请在管理控制台中选择它,然后打开处理程序映射配置功能。 在其中,单击Add Module Mapping...操作,然后输入以下信息:
- 请求路径:将其设置为
\*
以处理具有内部 Django 路由的所有请求 - Module : 将其设置为
FastCgiModule
以使用 IIS 的 FastCGI 模块 - Executable :在这里,
python.exe
路径及其命令行参数都需要设置,使用管道字符 (|
) 作为分隔符。 此设置的示例值为:C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings
。 注意,需要为manage.py
脚本指定fcgi
命令,并手动设置项目的 Python 解释器搜索路径,以及项目设置模块的 Python 模块名称。 - 名称:您可以将其设置为您喜欢的任何内容。
您的配置对话框应如下所示:
接下来,单击请求限制按钮并编辑映射选项卡。 取消选中“仅当请求映射到…时才调用处理程序”复选框(否则,IIS 将在映射它认为是 URL 请求中的子目录时出现问题):
在处理程序信息对话框上单击确定。 然后 IIS 将要求您确认创建匹配的 FastCGI 应用程序条目,您需要确认该条目。 此条目将在FastCGI 设置功能中可见,可在 IIS 管理控制台的根屏幕上访问。 IIS 本身创建的默认条目就足够了,但是您可能希望利用一些可选设置:
- 最大实例数:我们用于运行 FastCGI 应用程序的方法是单进程、单线程,这意味着将为每个同时请求启动一个单独的 Python 解释器进程。 此设置限制同时 Django 应用程序实例的数量。
- 监控文件更改:默认情况下,一旦启动,应用程序进程将处于活动状态,直到手动关闭,或者直到它们处理Instance MaxRequest请求。 通过使用此设置,IIS 将监视任意文件的时间戳,如果它发生更改,它将停止并重新加载应用程序实例。 这对开发人员和生产环境都很方便,因为它允许在更改时重新加载应用程序。 “监视文件的时间戳以重新加载指示器”在 Windows 上是一个相当奇怪的概念,但在类 Unix 环境中是正常的,因此这里使用 FastCGI 进行了继承。
配置静态资源和媒体目录
现代 Web 应用程序使用多种资源文件,例如 CSS、JavaScript 等,Django 应用程序也不例外。 Django 提供了一个非常方便的功能,允许开发人员将所需的资源集成到应用程序目录树中,但可以由 Django 提取并复制到适当的静态目录中。 这基本上是开发人员控制的功能,Django 存储静态文件的位置在项目的settings.py
中控制。 表现良好的项目将为此使用合理的合理路径,但它不是标准化的。
处理上传文件的应用程序将它们存储在一个类似管理的目录中,在 Django 中,该目录传统上被命名为media
。 static
和media
目录需要作为虚拟目录添加到 IIS 配置中:
这里重要的一步是为每个目录重新配置Handler Mappings功能并删除 Django App 处理程序,将StaticFile
处理程序作为最重要的处理程序。
请注意, static
目录必须是 IIS 可读的(以及 Django 项目中的所有其他文件和目录),但media
目录也必须是 IIS 可写的。 最终的站点配置应类似于以下内容:
关于数据库的说明
SQLite 默认在 Windows 上工作,就像在类 Unix 系统上一样。 大多数其他开源数据库现在都可以在 Windows 上运行,甚至是我推荐的 PostgreSQL。 但是,在现有的 Windows 安装中,可能需要使用 MS SQL Server 部署 Django。 这可以通过使用 ODBC 桥驱动程序或使用本机 MS SQL 驱动程序来实现。 理论上,两者都有效,但我没有测试过它们。 至少需要更改数据库连接参数(在项目的settings.py
文件中)才能切换到新数据库。 数据迁移需要手动完成。
注意,如果使用 SQLite 数据库,数据库文件和它所在的目录都需要 IIS 可写。
故障排除
所描述的配置已经过测试并证明可以正常工作,但如果出现问题,这里有一些基本步骤可用于对 Django for Windows 安装进行故障排除:
- 尝试自己启动 FastCGI 命令行。 这是在FastCGI 设置中配置的命令,它必须与在站点的处理程序映射中配置的命令相匹配。
- 安装 IIS 的跟踪功能,然后在失败的请求跟踪规则中为 Django 站点配置它以跟踪所有内容 ( )、状态代码“500”和事件严重性“错误”。 跟踪将在 IIS 的
C:\inetpub\logs\FailedReqLogFiles
目录(或类似目录,取决于您的配置)中以 XML 文件(附带 XSLT)的形式提供。 然后,您需要在 *Configure->Failed request tracking... 操作中启用对特定网站(或虚拟目录)的跟踪。
结论
可以肯定的是,Django 是为类 Unix 环境量身定制的,运行 Django 最广泛和受支持的方式是在 Linux 系统上(例如,使用 uwsgi 和 nginx)。
然而,让 Django 在 Windows 上运行并不需要太多工作,如本教程所示。 从纯粹的 Windows 角度来看,所描述的某些步骤可能看起来违反直觉,但它们是必要的,幸运的是,在配置中花费的精力只是一次性的。 配置完成后,Django 应用程序的行为方式应该与它在 Linux 平台上的行为方式大致相同。