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中Collection的使用小技巧
Aug 18 Python
Python下Fabric的简单部署方法
Jul 14 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
自学python的建议和周期预算
Jan 30 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
django认证系统 Authentication使用详解
Jul 22 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Django模型中字段属性choice使用说明
Mar 30 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
python 单机五子棋对战游戏
Apr 28 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
黑夜路人出的几道php笔试题
2009/08/04 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
jQuery 联动日历实现代码
2012/05/31 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python入门篇之字典
2014/10/17 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
用Python逐行分析文件方法
2019/01/28 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python自动创建Excel并获取内容
2020/09/16 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
高级3D打印市场:Gambody
2019/12/26 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
教师党员个人剖析材料
2014/09/29 职场文书
部队个人年终总结
2015/03/02 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS