专栏名称: 编程派
Python程序员都在看的公众号,跟着编程派一起学习Python,看最新国外教程和资源!
目录
相关文章推荐
Python初级入门到精通  ·  Python-finally语句与应用 ·  22 小时前  
Python爱好者社区  ·  太炸裂了!亚马逊云来了 ·  2 天前  
Python爱好者社区  ·  北大“韦神”粉丝超千万,家属回应牙齿缺失 ·  3 天前  
Python大全  ·  16个必知必会的Python技能! ·  2 天前  
Python开发者  ·  刚刚,OpenAI正式发布o3-pro!奥特 ... ·  2 天前  
51好读  ›  专栏  ›  编程派

Python 在 Web 开发中的应用

编程派  · 公众号  · Python  · 2017-03-20 11:41

正文

请到「今天看啥」查看全文


  • 在Apache中,你可以在教程 Dynamic Content with CGI 中查看所有相关内容。在大多数的情况下,只配置 + ExecCGI 就足够了。这篇教程也提到一些最常见的问题。

  • 在lighttp中需要使用能直接配置的 CGI模块 。总的来说,只要合理地对 cgi . assign 进行设置。

关于cgi脚本的常见问题

在运行CGI脚本的时候,时常会出现一些小的烦人的问题。有时看起来似乎正确的脚本不会像预期那样工作,原因是某些小的隐藏问题很难被发现。

以下是一些潜在的问题:

  • Python脚本没有被标记为可执行的。当CGI脚本不能被执行时,大部分服务器不会运行它并发送结果给用户,反而是让用户来下载它。在类Unix系统中,要正确运行CGI脚本,需要设置 + x 位(修改执行权限)。使用 chmod a + x your_script . py 可能会解决问题。

  • 在类Unix系统中,编程文件行结束必须是Unix风格的。这相当重要,因为服务器会检查脚本文件的第一行(称为shebang),并尝试运行那里指定的程序。如果是Windows的行结束(回车和换行Carriage Return&Line Feed, 所以称为CRLF),服务器就很容易混淆。因而你要将文件转为Unix的行结束(只有换行Line Feed,LF)。在通过FTP上传文件时,选择文本模式而非二进制模式,转换就可以自动完成。但更好的方式是在编辑器中用Unix风格的行结束保存文件。目前大多数的编辑器都支持这一选项。

  • 你的Web服务器必须能够读取文件,还要保证相关权限的正确。在类Unix系统中,服务器常在用户和用户组为 www - data 的状态下运行。所以可以试着去修改文件的所有权,或者用 chmod a + r your_script . py 命令将文件改为可读状态。

  • 在类Unix系统中,shebang(#!/usr/bin/env python)中解释器的路径必须正确。这行代码在 /usr/ bin / python 中寻找Python,但如果该目录不存在或者路径不正确,查找都会失败。你如果知道你的Python安装在哪里,可以使用绝对路径。命令 whereis python type - p python 都能帮助你找到它的安装位置。一旦你知道了正确的路径,你就可以相应地修改shebang: #!/usr/bin/python

  • 文件中不能包含BOM(Byte Order Mark)。使用BOM意味着使用UTF-16或UTF-32编码,但有的编辑器也将这些内容写进UTF-8编码的文件。BOM干扰了shebang一行,所以要确保你的编辑器不要将BOM写到文件中。

  • 如果Web服务器在使用 mod_python mod_python 可能会有问题。 mod_python 能够自己处理CGI脚本,但也能成为问题的源头。

mod_python

从PHP来的人经常很难抓住用Python进行Web开发的要领。他们第一时间想到的通常是 mod_python ,因为他们想 mod_python 等价于 mod_php 。事实上,它们之间有很多不同。 mod_python 做的是将解释器嵌入到Apache的进程里,这样就不用再为每个请求各启动一个解释器,从而加快了运行速度。另一方面,PHP经常混合着HTML,但Python不是。实际上,在Python中与之相当的是模板引擎。比起 mod_php , mod_python 本身要强大得多,它提供了更多的权限来访问Apache的内部。在一个Python混合HTML的"Python服务器页面"模式(与JSP相似)下,它可以模拟CGI工作。它还有一个"发布者",可以指定一个文件来接收所有请求并决定接下来如何处理它们。

mod_python 确实有很多问题。不同于PHP解释器,Python解释器在运行文件时是使用缓存的,所以修改文件时需要重启服务器。另一个问题是关于Apache的工作原理 --- Apache启动子进程来处理请求,即使用不到Python,每个子进程依然要加载整个Python解释器。这让整个服务器运行得更慢了。另一个问题则是,如果不重新编译 mod_python ,它就不能切换版本(例如从2.4升级到2.5),理由是 mod_python 依赖于一个特定版本的 libpython 。还有, mod_python 是绑定到Apache上的,所以用 mod_python 写的程序不能轻易移植到在其他Web服务器上。

已经有很多原因解释了应该避免用 mod_python







请到「今天看啥」查看全文