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使用PyCharm进行远程开发和调试
Nov 02 Python
numpy数组拼接简单示例
Dec 15 Python
Python单元测试实例详解
May 25 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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
Terran建筑一览
2020/03/14 星际争霸
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python查询IP地址归属完整代码
2017/06/21 Python
python实现俄罗斯方块
2018/06/26 Python
基于python实现简单日历
2018/07/28 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
社团活动总结书
2014/06/27 职场文书
租房协议书
2014/09/12 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
旷课检讨书500字
2014/10/14 职场文书
幼师大班个人总结
2015/02/13 职场文书
车位出租协议书范本
2016/03/19 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS