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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python编程之多态用法实例详解
May 19 Python
python插入排序算法实例分析
Jul 03 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
对Python中gensim库word2vec的使用详解
May 08 Python
让代码变得更易维护的7个Python库
Oct 09 Python
python实现简单加密解密机制
Mar 19 Python
使用turtle绘制五角星、分形树
Oct 06 Python
如何验证python安装成功
Jul 06 Python
Python3.9新特性详解
Oct 10 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
python如何实现递归转非递归
Feb 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
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
php实现文件上传基本验证
2020/03/04 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
21行Python代码实现拼写检查器
2016/01/25 Python
python的pip安装以及使用教程
2018/09/18 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python字典一键多值实例代码分享
2019/06/14 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Python pip使用超时问题解决方案
2020/08/03 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
吨的认识教学反思
2014/04/27 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
特此通知格式
2015/04/27 职场文书
大学生受助感言
2015/08/01 职场文书
javascript函数式编程基础
2021/09/15 Javascript