当前位置: 首页 > 面试题库 >

Python Web框架,WSGI和CGI如何结合在一起

居焱
2023-03-14
问题内容

我有一个Bluehost帐户,可以在其中运行Python脚本作为CGI。我猜这是最简单的CGI,因为要运行,我必须在中定义以下内容.htaccess

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

现在,每当我使用Python查找Web编程时,我都会听到很多有关WSGI以及大多数框架如何使用它的知识。但是我只是不明白它们之间的关系如何,尤其是当我的Web服务器(在主机上运行Apache)并且没有我真正可以使用的东西(定义.htaccess命令除外)时尤其如此。

WSGI,CGI和框架如何连接?我想在基本的CGI配置上运行Web框架(例如web.py或CherryPy),该怎么办?如何安装WSGI支持?


问题答案:

WSGI,CGI和框架如何连接在一起?

Apache侦听端口80。它获取HTTP请求。它解析请求以找到一种响应方式。Apache有很多可供选择的响应方式。一种响应方式是使用CGI运行脚本。另一种响应方式是简单地提供文件。

对于CGI,Apache准备一个环境并通过CGI协议调用脚本。这是标准的Unix Fork / Exec情况-
CGI子进程继承了包括套接字和标准输出的OS环境。CGI子进程编写一个响应,该响应可以返回到Apache。Apache将此响应发送到浏览器。

CGI是原始且令人讨厌的。主要是因为它为每个请求派生一个子流程,并且该子流程必须退出或关闭stdout和stderr来表示响应结束。

WSGI是基于CGI设计模式的接口。它不一定是CGI,也不必为每个请求派生一个子进程。可以是CGI,但不一定如此。

WSGI以几种重要方式添加了CGI设计模式。它为您解析HTTP请求标头,并将其添加到环境中。它提供任何面向POST的输入,作为环境中的类似文件的对象。它还为您提供了一个可以制定响应的功能,从而使您不必准备很多格式化细节。

如果要在基本CGI配置上运行Web框架(例如web.py或cherrypy),我需要知道/安装/做什么?

回想一下,分叉子过程很昂贵。有两种方法可以解决此问题。

  1. * 在Apache中 *嵌入mod_wsgimod_python嵌入Python;没有分叉的过程。Apache直接运行Django应用程序。

  2. 守护程序 mod_wsgimod_fastcgi允许Apache使用WSGI协议与单独的守护程序(或“长时间运行的进程”)进行交互。您启动长期运行的Django进程,然后配置Apache的mod_fastcgi与该进程进行通信。

请注意,它mod_wsgi可以在以下两种模式下工作:嵌入式或守护程序。

当您阅读mod_fastcgi时,您会看到Django使用flup从mod_fastcgi提供的信息创建与WSGI兼容的接口。管道的工作原理是这样的。

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

Django为各种接口提供了多个“ django.core.handlers”。

对于mod_fastcgi,Django提供了一个manage.py runfcgi将FLUP和处理程序集成在一起的。

对于mod_wsgi,有一个核心处理程序。

如何安装WSGI支持?

请遵循以下说明。

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

对于背景,请参阅此

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-
index



 类似资料:
  • CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等。 CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua,python等等。 WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务器之间的一种接口,WSGI的其中一个目的就是让用户可以用统一的语言(Python)编写前后端

  • 使用GatewayWorker时开发者最关心的是如何与现有mvc框架(ThinkPHP Yii laravel等)整合,以下是官方推荐的整合方式。见示意图: 总体原则: 现有mvc框架项目与GatewayWorker独立部署互不干扰 所有的业务逻辑都由网站页面post/get到mvc框架中完成 GatewayWorker不接受客户端发来的数据,即GatewayWorker不处理任何业务逻辑,Gat

  • 本文向大家介绍集合框架底层数据结构总结一下?相关面试题,主要包含被问及集合框架底层数据结构总结一下?时的应答技巧和注意事项,需要的朋友参考一下 Collection 1. List Arraylist: Object数组 Vector: Object数组 LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环) 2. Set HashSet(无序,唯一): 基于 Ha

  • Python Web Project 试图增强 Python 使之更适合用于 Web 开发。

  • 本文向大家介绍python web框架 django wsgi原理解析,包括了python web框架 django wsgi原理解析的使用技巧和注意事项,需要的朋友参考一下 前言 django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可以了 django只是web框架 他也不负责写socket djan

  • 问题内容: 我只是想知道不同CGI的区别和优势是什么。哪一个最适合python脚本,我如何告诉脚本使用什么? 问题答案: CGI与FCGI 懒惰,不要自己写。从维基百科:http : //en.wikipedia.org/wiki/FastCGI FastCGI不会为每个请求创建新的进程,而是使用持久性进程来处理此类请求。 可以配置多个进程,从而提高稳定性和可伸缩性。每个单独的FastCGI进程在