用Python编写网站

20

我非常擅长PHP,但想尝试一些新的东西。

我也了解一些Python,足以完成基础的操作,但没有在网页设计中使用过。

我刚刚写了这个,它能够正常工作:

#!/usr/bin/python

def main():
    print "Content-type: text/html"
    print
    print "<html><head>"
    print "<title>Hello World from Python</title>"
    print "</head><body>"
    print "Hello World!"
    print "</body></html>"

if __name__ == "__main__":
    main()

问题是,这似乎非常麻烦。在不使用像Django这样庞大的东西的情况下,编写能够处理GET和POST的脚本的最佳方法是什么?


9
Python 初学者觉得它比 PHP 麻烦的原因在于 PHP 是为创建网页而构建的,它具有自己的模板语言,并且内置了请求处理、参数解析、cookie 等框架。另一方面,Python 是一种通用语言,直接实现底层的 Web 功能会让你很快感到抓狂。请注意,这里的翻译意思与原文相同但用中文表达。 - Ants Aasma
1
对你的问题忍不住想回答“……是个坏主意” ;) - cllpse
9个回答

27

你的问题涉及基础CGI脚本,看了你的示例,但似乎每个人都选择用“使用我喜欢的框架”来回答。让我们尝试一种不同的方法。

如果您正在寻找上述编写内容(即CGI脚本)的直接替代品,则可能需要使用Python标准库中的cgi模块。 urlliburllib2也提供了补充功能。另外,您可能还对标准库中的BaseHTTPServerSimpleHTTPServer感兴趣。

进入更有趣的领域,wsgiref为您提供了WSGI接口的基础知识,此时您可能需要开始考虑更多类似于web.py、Django、Pylons、CherryPy等“框架化”(这是一个词吗?)的东西,正如其他人所提到的。


4
这个答案是正确的,肯定能让你学会用Python编写CGI。但是,它并不能帮助你学习Pythonic方法来解决这个特定的问题。Pythonic方法解决这个问题的答案可以在所有提供各种Web框架的回答中找到,这些框架都在积极开发和支持中。 - Stan Graves
是的,但我想先了解更低层次的工作原理。 - Rich Bradshaw
9
那么,请忘记CGI并了解WSGI。它也需要大约十分钟的学习时间,然后您就可以开始查看网络框架了。 ;) - Lennart Regebro

12

就完整框架而言,我认为Django相对较小。

如果您真的想要轻量级,请查看web.pyCherryPyPylonsweb2py

我认为上述中最受欢迎的是Pylons,但我是一个Django人,所以无法说更多。

有关轻量级Python框架的更多信息,请查看this question


也许 Django 没有我想象的那么大 - 我以为它相当于 Rails 或 CakePHP。 - Rich Bradshaw
我甚至在一些非 Web 应用程序中使用 Django,只是为了它的数据库或模板支持。 - FogleBird

8
有几个Python的Web框架可以使用,这些框架能够帮助你省去大部分工作:
  1. Django
  2. Pylons (以及基于它的新TurboGears)
  3. Web2py
  4. CherryPy (以及基于它的旧TurboGears)
我不认为Django像你说的那么“大”,然而,我认为Pylons和CherryPy可能是更好的答案。CherryPy看起来更简单,但也有点过时,而Pylons正在积极开发中。
对于Pylons,还有一本有趣的Pylons书籍在线可用。

2
在web2py中,上述代码应为:
在控制器default.py中:
def main():
    return dict(message="Hello World")

在视图default/main.html中:

<html><head>
<title>Hello World from Python</title>
</head><body>
{{=message}}
</body></html>

无需安装,也无需配置,您可以通过管理界面直接在Web上编辑上述两个文件。web2py基于WSGI,但也可与CGI、mod_python、mod_proxy和FastCGI一起使用,如果mod_wsgi不可用。


2
在Python中,生成网站的方式是使用框架。大多数流行(并且得到积极维护/支持)的框架已经被提到了。 一般来说,我不认为Djano或Turbogears是“巨大”的,我认为它们是“完整的”。每个框架都可以让您构建一个有数据库支持的动态网站。对于一个框架的偏好更多的是关于风格而不是功能。 另一方面,{{link1:Zope}} 确实感觉很“庞大”。 Zope在被开箱即用的特性方面也是“企业级”的。一个非常好的事情是,您可以在不使用Zope的其他部分的情况下使用ZODB(Zope对象数据库)。 如果我们知道您感兴趣开发的网站类型,那肯定会有所帮助,因为这可能有助于缩小建议范围。

0

我真的很喜欢 Django,而且它对我来说并不是很庞大。它非常强大,但并不庞大。

如果你想开始使用 http 和 python 进行编程,最简单的方法就是使用标准库中提供的 BaseHttpServer。请参阅 http://docs.python.org/library/basehttpserver.html 了解详细信息。


0

我同意Paolo的观点 - Django相当小巧,是前进的道路 - 但如果你不喜欢它,我会把TurboGears加入到列表中


我本来想添加TurboGears,但我认为它和Django一样大甚至更大。我该如何检查这样的事情? - Paolo Bergantino

0
如果您正在寻找一个框架,请查看这个列表:Python Web Frameworks 如果您需要小脚本或一次性作业脚本,可能普通的CGI模块就足够了 - CGI Scriptscgi module 本身。
如果您想创建更多的内容,而不仅仅是静态页面和简单的表单,我建议您坚持使用某些框架。我相信Django是最受欢迎和最受支持的框架。

0

“巨大”是一个主观的问题,但Django是一个“全栈”框架,包括从ORM到模板再到很多其他东西。所以它不小(虽然比其他全栈Python Web框架如Grok和Zope3要小)。

但也有很多非常小和极简的Web框架,仅提供Web部分的框架。许多已经在上面提到了。我必须将BFG和Bono添加到列表中。两者都非常简单,但仍然有用和灵活。

http://bfg.repoze.org/ http://bobo.digicool.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接