python在web可以开发吗_Python 在 Web 开发中的应用

复旦大数据(ID:FuDanBigData)

"Web 2.0"是指由用户主导网站内容的创作。自从这个概念兴起以来,网络编程就成为了一个热门话题。一直以来,用Python创建网站是相当繁琐的,所以也很少有人这么做。因此人们创建了许多框架和辅助工具来帮助开发者创建更快更可靠的网站。这篇HOWTO介绍了几种Python结合web服务器创建动态内容的方法。当然,因为这个话题涉及的内容太广,很难在单独的一篇文档里进行详细的描述。所以这里就只对一些当前流行的库作简要的概述。

参见:这篇HOWTO试图对Python的Web开发作一个概览,但不能总是按预期及时地更新。Python的Web开发正在迅速发展,所以wiki上的Web Programming可能与近期的发展更为接近。

底层视角

当一个用户访问网站时,他们的浏览器会与网站的服务器进行连接(这称为请求)。服务器在文件系统中寻找文件,并将其发送回用户的浏览器(这称为响应)。这就是底层HTTP协议的大致工作原理。动态网站不是基于文件系统中的文件,而是以程序为基础。当请求到来,运行在服务器上的程序就会生成相应内容并发送回用户。它们可以处理用户的各种数据,例如列出公告板上的帖子,显示你的邮件,配置软件,或者只是显示当前时间。这些程序能用服务器支持的任意语言完成。自从大部分的服务器开始支持Python,用Python创建动态网站就变得十分简单了。

大多数的HTTP服务器是用C或者C 写的,它们不能直接执行Python代码,所以服务器和程序之间就需要有一座桥。网桥,或者更确切地称为接口,决定了程序如何与服务器进行交互。

为了创建尽可能好的接口,人们作出了无数尝试,但只有少数的几个值得关注。

不是每一个服务器都支持所有的接口。许多服务器只支持老的,现在已经过时的接口。然而,它们经常可以通过第三方模块扩展来支持新的接口。

常用网关接口

这个接口,通常被称为"CGI",是最古老的,几乎被所有web服务器很好地支持着。在处理单个请求时,程序由服务器启动,通过CGI与服务器进行通讯。因而每个请求来临时都要花一定时间去启动新的Python解释器。这就使得整个接口在低负载状态的时候才能正常使用。

CGI的优点在于它很简单----用CGI写一个Python程序大概就是三行代码的事情。这种简易性造成了一种误解:它对开发者的帮助聊胜于无。

虽然还有可能用CGI写程序,但已经不建议这么做了。通过使用本文稍后提到的WSGI,就能模仿CGI的方式写程序,而且在迫不得已的时候,它们也能作为CGI运行。

参见:Python标准库包含了一些模块来帮助创建简单的CGI程序:

cgi-- 在CGI脚本中处理用户输入

cgitb-- 当在CGI应用中出现错误时,不再显示"500服务器内部错误"的消息,而用更好的错误回溯代替。

Python的wiki有专门描述CGI脚本的页面,里面有关于CGI在Python中的一些额外信息。

测试CGI的简单脚本

你可以用这个简短的CGI程序来测试你的服务器是否支持CGI。

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

# enable debugging

importcgitb

cgitb.enable()

print("Content-Type: text/plain;charset=utf-8")

print()

print("Hello World!")

根据你服务器的配置,你可能需要使用用.py或者.cgi扩展名来保存此代码。出于对安全的考虑,此文件也可能需要放置在cgi-bin目录中。

也许你想知道cgitb那行代码有什么作用。这行代码显示良好的错误回溯,而不仅仅是崩溃时在用户的浏览器上显示"服务器内部错误"。这有利于进行debug,但存在一定的风险暴露某些机密的数据给用户。基于这个原因,你不应该在生产环境中使用cgitb模块。还有,终端用户不会喜欢在浏览器上看到"服务器内部错误"这样不伦不类的信息,所以你应该捕获所有异常,并显示合适的错误页面。

在你自己的服务器上安装配置CGI

如果你没有自己的服务器,这就不适用于你。你可以检查服务器是否如常工作,如果不是,你就可能需要联系你网站的管理员。如果它是一个庞大的主机,你可以尝试提交问题请求Python支持。

如果你就是自己的管理员,或者基于测试的目的想在自己的电脑上安装CGI,你就必须自己进行配置。因为每个服务器的配置选项都不用,所以配置CGI没有通用的方法。现在使用最广的免费服务器是Apache HTTPd,或者简称Apache。通过系统的包管理工具,Apache可以轻易地安装到几乎所有的系统。lighttpd则是另一个选项,据说有着更好的性能。在许多系统中,可以使用包管理工具来安装这个服务器,所以不再需要手动来编译它。

在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

Tag标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值