Python web如何在IIS发布应用过程解析


Posted in Python onMay 27, 2020

Python web应用想要发布使用iis发布有两种方式,这篇文章就为大家介绍一下这两种方式的具体实现:

1.配置HttpPlatform程序

HttpPlatform 模块将套接字连接直接传递到独立的 Python 进程。 借助此传递可根据需要运行任何 Web 服务器,但需要用于运行本地 Web 服务器的启动脚本。 在 web.config 的 <httpPlatform> 元素中指定脚本,其中 processPath 属性指向站点扩展的 Python 解释器,arguments 属性指向脚本和希望提供的任何参数:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
  <handlers>
   <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
  </handlers>
  <httpPlatform processPath="c:\python36-32\python.exe"
         arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
         stdoutLogEnabled="true"
         stdoutLogFile="c:\home\LogFiles\python.log"
         startupTimeLimit="60"
         processesPerApplication="16">
   <environmentVariables>
    <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
   </environmentVariables>
  </httpPlatform>
 </system.webServer>
</configuration>

此处显示的 HTTP_PLATFORM_PORT 环境变量包含端口,本地服务器使用该端口侦听来自 localhost 的连接。 此示例还演示如何根据需要创建其他环境变量,本示例中为 SERVER_PORT。

关于httplplatform的更多描述可以参考

https://docs.microsoft.com/en-us/iis/extensions/httpplatformhandler/httpplatformhandler-configuration-reference

2.配置 FastCGI 处理程序

FastCGI 是在请求级别工作的接口。 IIS 接收传入的连接,并将每个请求转发到在一个或多个持久 Python 进程中运行的 WSGI 应用。

若要使用 wfastcgi 包,请先安装并配置它,如 pypi.org/project/wfastcgi/ 所述。

接下来,将应用的 web.config 文件修改为,在 PythonHandler 键中添加 python.exe 和 wfastcgi.py 的完整路径。

修改 web.config 中的 PythonHandler 条目,让路径与 Python 安装位置一致(有关确切的详细信息,请参阅 IIS 配置参考 (iis.net))。

<system.webServer>
 <handlers>
  <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
    scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
    resourceType="Unspecified" requireAccess="Script"/>
 </handlers>
</system.webServer>

在 web.config 的 <appSettings> 部分中,为 WSGI_HANDLER、WSGI_LOG(可选)和 PYTHONPATH 添加键:

<appSettings>
 <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
 <!-- The handler here is specific to Bottle; see the next section. -->
 <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
 <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
</appSettings>

PYTHONPATH 的值可以自由扩展,但必须包括你的应用的根目录,他扩展了sys.path,可以在这个路径下找到import的包。
WSGI_HANDLER 必须指向可从你的应用导入的 WSGI 应用,针对不同的框架,这个值也有一些区别,下面是一些例子。

1.Bottle:确保 app.wsgi_app 后面有括号,如下所示。 此操作是必需的,因为该对象是函数(请参阅 app.py))而非变量:

<!-- Bottle apps only -->
<add key="WSGI_HANDLER" value="app.wsgi_app()"/>

2.Flask:将 WSGI_HANDLER 值更改为 <project_name>.app,其中 <project_name> 与项目名称匹配。 可通过查看 runserver.py 中的 from <project_name> import app 语句,找到准确的标识符。 例如,如果项目命名为“FlaskAzurePublishExample”,则该条目如下所示:

<!-- Flask apps only: change the project name to match your app -->
<add key="WSGI_HANDLER" value="flask_iis_example.app"/>

3.Django:对于 Django 项目,需要对“web.config”进行两项更改。 首先,将 WSGI_HANDLER 值更改为 django.core.wsgi.get_wsgi_application()(该对象位于 wsgi.py 文件中):

<!-- Django apps only -->
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>

其次,在 WSGI_HANDLER 条目下添加以下条目,并将 DjangoAzurePublishExample 替换为项目名称:

<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />

WSGI_LOG 为可选,但建议在调试应用时使用,记录日志。

以上就是这两种方式,但是作为补充我还是想跟大家分享一下第二种方式,使用fastcgi时,我们在安装完wfastcgi后输入命令wfastcgi-enable之后程序做了什么。

Python web如何在IIS发布应用过程解析

我们可以根据IIS文档中对于FastCGI节的描述了解到。如果我们想要在web.config使用fastCGI时,必须先定义了该模块:

Python web如何在IIS发布应用过程解析

而这个定义方法呢,就是在IIS全局配置ApplicationHost.config中添加下面的配置,而这个也是我们在输入wfastcgi-enable之后做的事情:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
 <system.webServer>
  <fastCgi>
   <application fullPath="d:\home\site\wwwroot\Python34\python.exe" xdt:Locator="Match(fullPath)" xdt:Transform="Remove" />
   <application fullPath="d:\home\site\wwwroot\Python34\python.exe" arguments="D:\Python34\Scripts\wfastcgi.py" maxInstances="0" xdt:Transform="Insert"/>
  </fastCgi>
 </system.webServer>
</configuration>

如果您遇到了无法使用wfastcgi-enable这个命令的情况,比如Azure web app的windows环境,那么你可以使用这种方式使用自定义的python版本。

参考文档:以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于python socketserver框架全面解析
Sep 21 Python
python实现批量按比例缩放图片效果
Mar 30 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
python中字符串内置函数的用法总结
Sep 13 Python
Python面向对象之类的封装操作示例
Jun 08 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
Python队列、进程间通信、线程案例
Oct 25 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
python绘制箱型图
Apr 27 Python
利用Python实现某OA系统的自动定位功能
May 27 #Python
Python中常见的数制转换有哪些
May 27 #Python
Python如何实现邮件功能
May 27 #Python
Python中内建模块collections如何使用
May 27 #Python
Python OpenCV实现测量图片物体宽度
May 27 #Python
Python中socket网络通信是干嘛的
May 27 #Python
Python中SQLite如何使用
May 27 #Python
You might like
火车头采集器3.0采集图文教程
2007/03/17 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php实现算术验证码功能
2018/12/05 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
简单实现Python爬取网络图片
2018/04/01 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
便利店投资创业计划书
2014/02/08 职场文书
服装采购员岗位职责
2014/03/15 职场文书
公司总经理岗位职责
2014/03/15 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
个人整改方案范文
2014/10/25 职场文书
研究生导师评语
2014/12/31 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python