本文介绍了如何在Windows上部署Python Flask应用,相关环境以下:python
应用所用到的包版本以下:git
Flask==0.10.1 Flask-SQLAlchemy==2.1 itsdangerous==0.24 Jinja2==2.8 MarkupSafe==0.23 pyodbc==3.0.10 SQLAlchemy==1.0.9 Werkzeug==0.11.2 wheel==0.24.0
wfastcgi.py使用WSGI和FastCGI提供了IIS和Python之间的桥接,相似于Apache HTTP服务器上的mod_python.github
它可以用于任何支持WSGI的Python web应用或者框架,并且提供了IIS处理请求和进程池的高效方法。web
经过PyPI安装:windows
pip install wfastcgi
IIS须要安装FastCGI和URL重写,这个能够经过Microsoft Web Platform Installer来安装。下载过Microsoft Web Platform Installer点击运行,会出现以下的界面。服务器
在搜索栏分别输入cgi和url重写,点击添加按钮:app
注:windows10上的IIS 10如今不支持url重写。框架
一旦wfastcgi
和IIS安装完毕,用管理员的身份运行wfastcgi-enable
来在IIS上启用wfastcgi
配置。这个能配置一个路由处理器的CGI应用。网站
wfastcgi-enable
要在卸载以前禁用wfastcgi
,运行wfastcgi-disable
:ui
wfastcgi-disable pip uninstall wfastcgi
注意: 卸载wfastcgi
不会自动的取消注册CGI应用。
若是传递给wfastcgi-enable
或者wfastcgi-disable
的第一个参数是一个有效的文件,整个命令行就用来注册或取消注册这个CGI处理器。
例如,下面的命令就是在IIS Express上启用wfastcgi,并且指定主机配置。
wfastcgi-enable "C:\Program Files (x86)\IIS Express\appcmd.exe" /apphostconfig:C:\Path\To\applicationhost.config
你也可使用wfastcgi-disable
来禁用相同配置的wfastcgi:
wfastcgi-disable "C:\Program Files (x86)\IIS Express\appcmd.exe" /apphostconfig:C:\Path\To\applicationhost.config
PTVS是Visual Studio的一个插件,可以让VS支持Python开发,下载并安装后,就可使用它来开发Python项目了。
使用PTVS建立一个Flask项目(Django项目相似):
PTVS会自动根据模板建立一个项目,点击运行,就会在项目根目录下建立一个web.config文件。我在下面对文件进行了一些修改说明。
?xml version="1.0"?> <configuration> <system.diagnostics> <!--若是不用此节点能够移除--> </system.diagnostics> <appSettings> <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="TgwlDataCenter.app" /><!--value指定Flask实例,PTVS会自动生成,也能够本身定义--> <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="%ROOTDIR%\env\Scripts\activate_this.py" /><!--value指定激活虚拟路环境用到的内容--> <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" /><!--也是虚拟路径的WSGI_HANDLER,不用修改--> <add key="PYTHONPATH" value="%ROOTDIR%" /><!--项目根目录--> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="%INTERPRETERPATH%|%WFASTCGIPATH%" resourceType="Unspecified" requireAccess="Script" /><!--scriptProcessor的值就是你在运行wfastcgi-enbale时输出的值--> </handlers> <rewrite> <rules> <rule name="Static Files" stopProcessing="true"> <match url="^/static/.*" ignoreCase="true" /><!--静态文件不用CGI处理,直接使用IIS返回静态文件--> <action type="Rewrite" url="^/TgwlDataCenter/static/.*" appendQueryString="true" /> </rule> <rule name="Configure Python" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <conditions> </conditions> <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
scriptProcessor
的值是wfastcgi-enable
命令执行时输出的,不一样机器值也不同。path
和verb
的值也能够进一步自定义来限制request的类型。
name
值能够在子文件夹的web.config
文件中使用,来屏蔽handler的做用。好比,在/static
子文件夹中添加一个web.config
文件,包含<remove name="Python FastCGI"/>
来阻止IIS经过Python应用来解析静态文件。
app setting被转换为环境变量,而且可以在Python应用中经过os.getenv
来获取。下面这些变量由wfastcgi
使用。
注意:部署时须要将%ROOTDIR%
所有替换为项目根目录,%INTERPRETERPATH%|%WFASTCGIPATH%
替换为wfastcgi-enable
命令执行时输出,个人是C:\Python34\python.exe|C:\Python34\lib\site-packages\wfastcgi.py
此时,将项目部署到IIS上就能够了,建立方法同普通的ASP.NET网站建立方法相同。
做者:做者:liulixiang1988#gmail.com (#换成@)