CgiScripts

/! 这一篇是CgiScripts中译版本。

CGI Scripts

cgi 模组是Python CGI脚本的核心。

最简单的CGI脚本可以考虑包括输出HTTP表头(“Content-type: text/html”)及一个网页,另外你可能想要处理来自像是HTML的表单或是请求参数的输入,在早期的CGI,shell scripts有时用来做这样的事,所以这些原则不会特别先进。

设定

要取得脚本正确的权限可以在像是Apache的Web服务上执行是一个麻烦的经验,但是如果遵循这面的检核或许有一些管用:

  1. 找出哪个使用者可以在Web伺服器执行 – 它不跟你自己的使用者一样,它很可能是很受限制权限的使用者。
  2. 检查伺服器设定看看是否可以让你在特定的目录下执行脚本,确认这个特定目录使用的设定档,全域设定允许你定义局部目录设定档中的CGI脚本的目录 – 有些网站会停止他们的使用者变更这样的设定。
  3. 检查档案系统顶层到脚本存在的目录权限,Web伺服器使用者必须能够读及开启/执行从顶层到脚本所有目录。
  4. 确认你的脚本可以被Web伺服器使用者读取跟执行。
  5. 确认脚本第一行参考的是Web伺服器可以执行的解译器,像/usr/bin/env python对Web伺服器使用者来说可能没有意义因为python程式不会在使用者的路径上。

范例程式码

下面的程式码试着将使用者检视的这一页结合输入的处理做简单的网页输出,你可能希望根据下面提供的前两行来选择脚本真正的第一行 – 第一行可能只在Winodws上可运作,第二行可能只在UNIX-like系统上运作。

切换行号

   1 #!/usr/bin/env python
   2 
   3 import cgi
   4 import cgitb; cgitb.enable()  # for troubleshooting
   5 
   6 print "Content-type: text/html"
   7 print
   8 
   9 print """
  10 <html>
  11 
  12 <head><title>Sample CGI Script</title></head>
  13 
  14 <body>
  15 
  16   <h3> Sample CGI Script </h3>
  17 """
  18 
  19 form = cgi.FieldStorage()
  20 message = form.getvalue("message", "(no message)")
  21 
  22 print """
  23 
  24   <p>Previous message: %s</p>
  25 
  26   <p>form
  27 
  28   <form method="post" action="index.cgi">
  29     <p>message: <input type="text" name="message"/></p>
  30   </form>
  31 
  32 </body>
  33 
  34 </html>
  35 """ % message

另外参考


讨论

  • 我们需要一个好的python CGI 架构 – Sridhar R
    • 虽然Nevow 跟 Wallaby 定义”架构”,你的意思是像Django-这样的处理或只是较容易写CGI应用程式那样?


是的…

有很多Python网路应用程式TurboGears Django Zope ModPython Pso Aquarium Cheetah ++++++…等的架构。

但是假如python提供Session处理、JSON – 像XML-RPC标准环境 + WSGI 及未来的科技….这样简单的Web开发,那将更美好

-Vinoth vinoth.3v@gmail.com

很多共享主机不允许持续的处理,他们会删除执行超过3分钟的脚本,这个架构不能解释那些只用cgi及ftp的人(或使生活较容易),你知道任何的方式可以使程式码在这种环境下更简单/更快吗?Osvaldo