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 datetime时间格式化去掉前导0
Jul 31 Python
python 美化输出信息的实例
Oct 15 Python
python生成以及打开json、csv和txt文件的实例
Nov 16 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
python ---lambda匿名函数介绍
Mar 13 Python
详解python解压压缩包的五种方法
Jul 05 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python设置中文界面实例方法
Oct 27 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
python 批量压缩图片的脚本
Jun 02 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
jquery获得下拉框值的代码
2011/08/13 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python识别验证码图片实例详解
2020/02/17 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
TCP/IP的分层模型
2013/10/27 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
教师自荐信范文
2013/12/09 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
文明学生标兵事迹
2014/01/21 职场文书
客服部工作职责范本
2014/02/14 职场文书
新学期教师寄语
2014/04/02 职场文书
幼儿园安全责任书
2014/04/14 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
教师个人自我评价
2015/03/04 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android