本文介紹瞭如何在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 (#換成@)