在IIS上安装Django(分步教程)

本文概述

  • 在Windows上安装Python
  • 在Windows上安装Django
  • 在Windows上安装Django项目
  • 运行测试HTTP服务器
  • 配置和运行FastCGI服务器
  • 配置IIS以运行FastCGI应用程序
  • 配置静态资源和媒体目录
  • 关于数据库的说明
  • 故障排除
  • 总结
尽管许多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和Frozen。如果项目中有项目依赖项, PIP也将安装项目依赖项(附加库)。
运行pip install < package_name> 将下载并安装软件包及其所有依赖项(可能是嵌套的并且相当复杂)。运行pip install – upgrade < package_name> 同样会将现有软件包升级到最新版本。 PIP支持一种特殊的语法, 用于安装软件包的精确版本, 而不仅仅是” 最新版本” 。这是通过在软件包名称后附加一个运算符和一个版本号来完成的。例如” Jinja2 == 2.7.3″ (安装精确版本)或” six> = 1.8″ (安装等于或大于指定版本号的任何版本)。
【在IIS上安装Django(分步教程)】运行pip冻结仅以pip安装可直接使用的格式显示当前已安装软件包的列表。
请注意, 某些Python / PIP软件包随附了用C编写的库, 必须对其进行编译才能使该软件包正常工作。除非你将系统设置为具有可与Python可执行文件兼容的C编译器, 否则你将无法安装此类软件包。 Django是纯Python库, 因此不需要C编译器即可安装。
安装Python 2.7.9或更高版本非常重要, 因为以2.7.9开头的Python版本包括PIP, 这是用于安装本教程中其他所有内容的Python库/软件包/软件管理器。
安装过程非常简单明了。它将提供将Python安装在C:\ Python27目录中, 你应该接受该目录, 因为这样可以使以后的工作更加轻松。尽量不要让Windows习惯在名称中带有空格的目录中安装内容。
安装后的基本目录将包含大约8个子目录, 一些其他文件和两个名为Python.exe和PythonW.exe的可执行文件。前者是默认的命令行解释器和Python shell, 而后者只是解释器, 如果被调用, 它们将不使用(或产生)控制台窗口, 因此适合运行GUI Python应用程序。
接下来, 应将Python添加到系统的PATH环境变量中。通过在” 高级系统设置” (或” 系统属性” )的” 高级” 选项卡中, 通过单击” 环境变量” 按钮来完成此操作。有两个目录要添加:C:\ Python27和C:\ Python27 \ Scripts。这些应附加在PATH列表中, 并用分号(; )分隔。 PATH变量的结尾应类似于; C:\ Python27; C:\ Python27 \ Scripts。
专家提示:你可能还想安装GOW, 这是与Cygwin类似的轻量级Unix命令行实用程序的集合。它会为你提供诸如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命令来检查Windows的Python和Django是否都正常工作。如果工作正常, 则import django命令后不应有任何输出或消息。即:
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\src22/12/201404:25< DIR> . 22/12/201404:25< DIR> .. 22/12/201404:19< DIR> project 22/12/201404:58< DIR> djangoapp 16/12/201403:30< DIR> templates 16/12/201400:50250 manage.py 1 File(s)250 bytes 5 Dir(s)23, 552, 929, 792 bytes free

通过归档整个项目目录并将其解压缩到另一台机器上, 可以简单地分发Django项目。在上面的示例中, 项目包含项目子目录, 名为djangoapp的应用程序目录以及辅助模板子目录。
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.

从消息中可以看到, 这将在本地主机8000端口上启动服务器。你可以使用Web浏览器立即访问它。
配置和运行FastCGI服务器 一个更有趣的选项是启用FastCGI服务器。使用FastCGI, 你可以使用IIS, Apache或任何其他Web服务器在生产环境中为应用程序提供服务。为此, 你需要下载fcgi.py(用于通过IIS通过FastCGI在IIS上在Windows上运行Django的Django管理命令), 并将其放入Django应用程序(而非项目!)子目录的management / commands子目录中。管理和命令子目录都必须有一个名为__init__.py的空文件(它将这些目录转换为Python模块)。
fcgi.py是一个非常简单且极简的WSGI到FastCGI适配器, 它不支持在TCP套接字或管道上进行侦听, 并且通过使用stdin和stdout`进行所有处理。因此, 它不适用于nginx等现代Web服务器, 但可以与IIS一起使用。
配置IIS以运行FastCGI应用程序 如果将FastCGI模块加载到IIS中(或者仅将IIS 7+中的CGI模块加载), 则IIS管理控制台将具有” FastCGI设置” 图标。 Django是一个具有自己的URL路由的框架, 因此必须将Django应用作为IIS的” 处理程序” 安装在特定路径上。要在IIS的默认网站上安装Django应用, 请在管理控制台中将其选中, 然后打开处理程序映射配置功能。在其中, 单击” 添加模块映射… ” 操作, 然后输入以下信息:
  • 请求路径:将其设置为\ *以使用内部Django路由处理所有请求
  • 模块:将其设置为FastCgiModule以使用IIS的FastCGI模块
  • 可执行文件:此处, 需要使用竖线字符(|)作为分隔符来设置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上安装Django(分步教程)

文章图片
接下来, 单击” 请求限制” 按钮, 然后编辑” 映射” 选项卡。取消选中” 仅在请求映射到…时才调用处理程序” 复选框(否则, IIS在映射它认为是URL请求中的子目录时会遇到问题):
在IIS上安装Django(分步教程)

文章图片
在处理程序信息对话框上单击确定。然后, IIS将要求你确认是否需要创建匹配的FastCGI应用程序条目。此项将在FastCGI设置功能中可见, 可在IIS管理控制台的根屏幕上访问。 IIS本身创建的默认条目就足够了, 但是你可以利用一些可选设置来利用:
  • 最多实例数:我们用于运行FastCGI应用程序的方法是单进程, 单线程, 这意味着将为每个同时请求启动一个单独的Python解释器进程。此设置限制了并发Django应用实例的数量。
  • 监视对文件的更改:默认情况下, 一旦启动, 应用程序进程将处于活动状态, 直到手动关闭或处理实例MaxRequest请求为止。通过使用此设置, IIS将监视任意文件的时间戳, 如果更改, 它将停止并重新加载应用程序实例。这对于开发人员和生产环境都很方便, 因为它允许你在更改应用程序后重新加载它们。在Windows上, “ 监视文件的时间戳以重新加载指示符” 是一个很奇怪的概念, 但是在类似Unix的环境中是正常的, 因此它被FastCGI继承了下来。
在IIS上安装Django(分步教程)

文章图片
配置静态资源和媒体目录 现代的Web应用程序使用多个资源文件, 例如CSS, JavaScript等, 而Django应用程序也不例外。 Django提供了一个非常方便的功能, 该功能允许开发人员将所需的资源集成到应用程序目录树中, 但是Django可以将其提取并复制到正确的静态目录中。这基本上是开发人员控制的功能, 而Django将存储静态文件的位置由项目的settings.py控制。表现良好的项目将为此使用合理的合理路径, 但是它不是标准化的。
处理上载文件的应用程序将它们存储在类似管理的目录中, 该目录在Django中传统上称为媒体。静态目录和媒体目录需要作为虚拟目录添加到IIS配置中:
在IIS上安装Django(分步教程)

文章图片
这里重要的步骤是为每个目录重新配置Handler Mappings功能, 并删除Django App处理程序, 而StaticFile处理程序为最重要的处理程序。
请注意, IIS必须能够读取静态目录(以及Django项目中的所有其他文件和目录), 但是IIS也可以写入媒体目录。最终站点配置应类似于以下内容:
在IIS上安装Django(分步教程)

文章图片
关于数据库的说明 默认情况下, SQLite在Windows上可以正常运行, 就像在类Unix系统上一样。现在, 大多数其他开源数据库都可以在Windows上运行, 甚至我建议使用PostgreSQL。但是, 在现有的Windows安装中, 可能需要与MS SQL Server一起部署Django。这可以通过使用ODBC桥驱动程序或通过使用本机MS SQL驱动程序来实现。从理论上讲, 两者都可以, 但我尚未对其进行测试。至少需要更改数据库连接参数(在项目的settings.py文件中)才能切换到新数据库。数据迁移需要手动完成。
请注意, 如果使用SQLite数据库, 则IIS必须可写数据库文件和数据库文件所在的目录。
故障排除 所描述的配置已经过测试, 并证明可以正常工作, 但是如果出现问题, 请执行以下基本步骤来对Django for Windows安装进行故障排除:
  1. 尝试自己启动FastCGI命令行。这是在FastCGI设置中配置的命令, 该命令必须与在站点的” 处理程序映射” 中配置的命令匹配。
  2. 安装IIS的跟踪功能, 然后在” 失败的请求跟踪规则” 中为Django站点进行配置, 以跟踪所有内容(), 状态码” 500″ 和事件严重性” 错误” 。跟踪将以XML文件(带有XSLT附件)的形式提供在IIS的C:\ inetpub \ logs \ FailedReqLogFiles目录中(或类似的目录, 具体取决于你的配置)。然后, 你需要在* Configure-> Failed request tracing … 操作中启用对特定网站(或虚拟目录)的跟踪。
总结 可以肯定的是, Django是为类似Unix的环境量身定制的, 并且运行Django的最广泛和受支持的方法是在Linux系统上(例如, 使用uwsgi和nginx)。
但是, 如本教程所示, 要使Django在Windows上运行并不需要太多工作。从纯Windows的角度看, 所描述的某些步骤似乎违反直觉, 但是它们是必需的, 幸运的是, 花费在配置上的工作只是一次。配置完成后, Django应用程序的行为应与Linux平台上的行为大致相同。

    推荐阅读