作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
伊万·沃拉斯博士的头像

Ivan Voras, PhD

Ivan 15年以上的后端和区块链架构经验见证了从DBA ops到OS内核模块(FreeBSD)开发的方方面面。.

Years of Experience

21

Share

Though many Django Developers 可能会认为这是亵渎神明,但有时它实际上是必要的部署 Django Windows/IIS上的应用程序, 尤其是在使用基于Windows生态系统的客户端时. “亵渎”的部分是因为Django确实是针对Unix环境的, 严重依赖于 WSGI, FastCGI以及命令行工具,这些都是Windows所不熟悉的. Fortunately, Django和IIS的兼容性正在提高, 这要归功于Windows和Python+Django两侧的特性添加(否则将是一个拼凑), 从而帮助解决这两个完全不同的技术世界之间的兼容性问题.

这个简短、重点突出的教程将引导您完成Django项目在Windows上的基本设置. 它涵盖了Python的安装, Django, and related tools, 包括独立运行Django项目和作为FastCGI服务器运行. 顺便说一句,后者越来越重要,因为 IIS现在正式支持FastCGI (在IIS 7+上,只需安装CGI功能).

Note: 本教程的目标读者是对Windows有一定了解并熟悉IIS管理控制台的人. 本教程中使用的IIS版本是8.但描述和技术与早期版本相似. 本教程基于Python 2.7 and Django 1.7,因为这些是我在项目中使用的版本. You can find another Django tutorial here.

专业提示:如果你要部署多个Django(甚至纯Python)项目, or if you are a developer, you should look at virtualenv,用于创建独立的Python环境的工具.

在Windows上安装Python

First, download Python. 提供32位和64位的MSI安装程序, 您应该选择适合您正在安装的机器的一个.

The Basics of PIP

PIP是安装和维护Python库的工具(Django只是其中一个例子). 方法调用它 pip 命令提示符下的命令. 它实现了几个子命令,其中最有用的两个是 install and freeze. PIP还将安装项目依赖项(附加库), 项目应该有吗.

Running pip install 将下载并安装包及其所有依赖项(可能嵌套且相当复杂)。. Running pip install --upgrade 是否将现有的软件包升级到最新版本. PIP支持一种特殊的语法,用于安装软件包的精确版本,而不仅仅是“最新版本”。. It is done by appending an operator and a version number to the package name; e.g. "Jinja2==2.7.3" (to install a precise version) or "six>=1.(安装等于或大于指定版本号的任何版本).

Running pip freeze 简单地显示当前安装的软件包列表,格式可以直接使用 pip install.

请注意,一些Python / PIP包附带了用C编写的库, 要使包工作,必须编译哪些内容. 除非您将系统设置为具有与Python可执行文件兼容的工作C编译器, 您将无法安装这样的软件包. Django是一个纯Python库,所以它不需要安装C编译器.

安装Python 2很重要.7.9或更高版本,因为Python版本以2开头.7.9 include PIP, Python库/包/软件管理器,用于安装本教程中的其他内容.

安装过程非常直接和简单. 文件中安装Python C:\Python27 目录,您应该接受它,因为它使以后的工作更容易. 尽量不要屈服于Windows的习惯,在目录中安装带有空格的东西.

安装后的基本目录将包含大约8个子目录, 一些杂项文件和两个可执行文件命名为 Python.exe and PythonW.exe. 前者是默认的命令行解释器和Python shell, 而后者只是翻译, 哪个不会使用(或衍生)控制台窗口,如果调用, 因此适合运行GUI Python应用程序.

接下来,应该将Python添加到系统的PATH环境变量中. This is done in Advanced System Settings (or System Properties), in the Advanced tab, by clicking on the Environment Variables button. 要添加的目录有两个: C:\Python27 and C:\Python27\Scripts. 这些应该添加到PATH列表中,以分号分隔(;). PATH变量的结尾应该是这样的 ; C: \ Python27; C: \ Python27 \脚本.

专业提示:您可能还需要安装 GOW一个轻量级的Unix命令行实用程序集合,类似于Cygwin. 它将为您提供工具,如 ls,还有更有趣的,比如 make, wget, curl, ssh, scp, gzip and tar.

在Windows上安装Django

Django可以使用PIP安装,命令如下 pip install django. 这个过程可能会引入一些额外的依赖项,如果它们还没有出现在您的系统上. 否则,它只会安装Django,输出如下所示:

下载/ django拆包
安装收集包:django
django安装成功
Cleaning up...

你可以通过启动一个新的Windows命令提示符来检查Python和Django for Windows是否正常工作, running the python command, and entering the import django 命令. 如果工作正常,则应该没有输出或消息 import django command; i.e.:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v . c ..1500 32位(Intel)]在win32上
输入“帮助”、“版权”、“信用”或“许可”获取更多信息.
>>> import django
>>>

在Windows上安装Django项目

一个Django“项目”由一个或多个“应用”组成。. 项目的顶级目录通常包含一个特殊的项目子目录,其中包含设置和一些常规的项目级信息, one subdirectory per app, 命令行脚本名为 manage.py. For example:

C:\Devel\djangoproject\src>dir
 Volume in drive C is OS
 卷序列号为6A3D-C1B8

 目录:C:\Devel\djangoproject\src

22/12/2014  04:25              .
22/12/2014  04:25              ..
22/12/2014  04:19              project
22/12/2014  04:58              djangoapp
16/12/2014  03:30              templates
2014年12月16日00:50 250管理.py
               1文件(s) 250字节
               5个目录(s) 23,552,929,792字节空闲

Django项目可以通过归档整个项目目录并在另一台机器上解压缩来简单地分发. 在上面的示例中,项目包含 project 子目录下,应用程序目录命名 djangoapp, and an auxiliary templates subdirectory.

The manage.py 脚本是Django应用程序的“瑞士军刀”. 它从创建新应用程序无所不包, to database migrations, 运行测试(嵌入式)HTTP服务器甚至FastCGI服务器.

Running a test HTTP server

如果项目及其应用程序是功能性的, 你应该能够通过运行这个命令来启动默认的Django开发专用HTTP服务器 manage.py runserver,输出结果如下所示:

C:\Devel\djangoproject\src>manage.py runserver
Performing system checks...

系统检查未发现任何问题(0沉默).
2014年12月23日- 01:19:02
Django version 1.7.1, using settings 'project.settings'
在http://127上启动开发服务器.0.0.1:8000/
使用CTRL-BREAK退出服务器.

从消息中可以看到,这会在本地主机上启动一个服务器,端口为8000. 您可以立即访问它与您的网络浏览器.

配置和运行FastCGI服务器

一个更有趣的选择是启用FastCGI服务器. With FastCGI, you can use IIS, Apache, or any other web server, 在生产环境中为应用程序服务. 要使其工作,您需要下载 fcgi.py (通过FastCGI在Windows上使用IIS运行Django的Django管理命令),并将其放入 management/commands Django应用的子目录(不是项目的子目录)!) subdirectory. Both the management and the commands subdirectories must have an empty file named __init__.py (将这些目录转换为Python模块).

fcgi.py 是一个非常简单和简约的WSGI到FastCGI适配器,做什么 not 支持监听TCP套接字或管道,并通过使用 stdin and stdout`. 因此,它不能用于现代web服务器,如 nginx, but will work with IIS.

配置IIS以运行FastCGI应用程序

如果在IIS中加载了FastCGI模块(或者在IIS 7+中加载了CGI模块), IIS管理控制台将有“FastCGI设置”图标可用. Django是一个框架,它有自己的URL路由, 所以Django应用必须在IIS中以“handler”的形式安装. 在IIS上安装Django应用程序 Default Web Site,在管理控制台中选择它,然后打开 Handler mappings configuration feature. In it, click on the Add Module Mapping… 操作,并输入以下信息:

  • Request path: Set it to \* 用Django内部路由处理所有请求
  • Module: Set it to FastCgiModule 使用IIS的FastCGI模块
  • Executable: Here, both the python.exe Path及其命令行参数需要使用管道字符(|) as a separator. 该设置的示例值为: C:\Python27\python.exe|C:\app\src\manage.C:\app\src——settings project.settings. 注意,您需要指定 fcgi command for the manage.py script, 并手动设置Python解释器的项目搜索路径, 以及项目设置模块的Python模块名称.
  • Name你可以把这个设置成你喜欢的任何值.

你的配置对话框应该看起来像这样:

iis configuration dialog

Next, click the Request restrictions button and edit the Mapping tab. 取消选中“仅当请求映射到…时调用处理程序”复选框(否则, IIS将在映射它认为是URL请求中的子目录时遇到问题:

request restrictions

在处理程序信息对话框中单击OK. 然后,IIS将要求您确认是否创建了一个匹配的FastCGI应用程序条目,您需要确认. 控件中可以看到该条目 FastCGI Settings 特性,可在IIS管理控制台的根屏幕上访问. IIS本身创建的默认条目就足够了, 但是有一些可选的设置,你可能想要利用:

  • Max instances我们运行FastCGI应用程序的方法是单进程的, single-threaded, 这意味着将为每个进程启动一个单独的Python解释器进程 simultaneous request. 这个设置限制了同时运行的Django应用实例的数量.
  • Monitor changes to file: By default, once started, 应用程序进程将处于活动状态,直到手动关闭, or until they handle Instance MaxRequest requests. By using this setting, IIS将监视任意文件的时间戳, and if it changes, 它将停止并重新加载应用实例. 这对开发人员和生产环境都很方便, 因为它允许应用程序在更改时重新加载. 在Windows上,“监视文件的时间戳以获得重新加载指示器”是一个相当奇怪的概念, 但这在类unix环境中是正常的, 所以它被FastCGI带到这里.

add FastCGI application

配置静态资源和媒体目录

现代web应用程序使用多个资源文件, such as CSS, JavaScript and others, Django应用也不例外. Django提供了一个非常方便的特性,允许开发人员将所需的资源集成到应用程序目录树中, 但是它可以被Django提取并复制到一个合适的, static directory. 这基本上是一个由开发人员控制的特性, Django存储静态文件的位置是在项目中控制的 settings.py. 表现良好的项目将使用合理的路径来实现这一点,但它不是标准化的.

处理上传文件的应用程序将它们存储在一个类似的管理目录中, in Django, is traditionally named media. The static and media 目录需要作为虚拟目录添加到IIS配置中:

配置静态资源和媒体目录

这里的重要步骤是重新配置 Handler Mappings 特性,并删除Django App处理程序,留下 StaticFile Handler是最重要的.

Note that the static 目录必须是IIS可读的(以及Django项目中的所有其他文件和目录), but the media 目录也必须是IIS可写的. 最终的站点配置应该如下所示:

Iis站点配置示例

A note about databases

SQLite 默认情况下在Windows上工作,在类unix系统上也是如此. 大多数其他的开源数据库现在甚至可以在Windows上运行 PostgreSQL, which I recommend. 在现有的Windows安装上, though, 可能需要将Django与MS SQL Server一起部署. 可以使用 ODBC bridge driver or by using a native MS SQL driver. 理论上,这两种方法都有效,但我还没有测试过. 至少数据库连接参数(在项目的 settings.py 文件)需要更改以切换到新数据库. 数据迁移需要手动完成.

注意,如果使用SQLite数据库, 数据库文件和它所在的目录都需要是IIS可写的.

Troubleshooting

所描述的配置经过测试并证明是有效的, 但如果出了什么差错, 下面是一些解决Django for Windows安装问题的基本步骤:

  1. 尝试自己启动FastCGI命令行. 命令中配置的命令 FastCGI Settings 它必须与配置在 Handler Mappings for the site.
  2. Install the Tracing feature for IIS,然后为Django站点配置它 失败请求跟踪规则 to trace all content (),状态码为“500”,事件严重性为“Error”。. 在IIS中,跟踪将作为XML文件(附带XSLT)提供 C: \ inetpub \ \ FailedReqLogFiles日志 目录(或类似的目录,取决于您的配置). You then need to enable tracing for the particular web site (or a virtual directory) in the *Configure->Failed request tracing… action.

Conclusion

To be sure, Django是为类unix环境量身定制的, 最广泛和最受支持的运行Django的方式是在Linux系统上.g., with uwsgi and nginx).

然而,正如本教程所示,让Django在Windows上运行并不需要太多的工作. 从纯粹的Windows角度来看,所描述的一些步骤似乎违反直觉, but they are necessary and, fortunately, 在配置中花费的精力是一次性的. Once configured, Django应用程序的行为应该和它在Linux平台上的行为差不多.

聘请Toptal这方面的专家.
Hire Now
伊万·沃拉斯博士的头像
Ivan Voras, PhD

Located in Zagreb, Croatia

Member since August 26, 2014

About the author

Ivan 15年以上的后端和区块链架构经验见证了从DBA ops到OS内核模块(FreeBSD)开发的方方面面。.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Years of Experience

21

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.