【问题标题】:Web programming Python [closed]网络编程 Python [关闭]
【发布时间】:2012-04-27 11:13:01
【问题描述】:

我是一名业余开发人员,对 PHP 有一点经验。

我最近学习了 Python,我不得不承认它作为一种编程语言及其强大的库非常棒,但是将它用于 Web 开发似乎是一件很痛苦的事情。就我阅读的内容而言,我必须使用 CGI、mod_wsgi 等进行部署(http://docs.python.org/howto/webservers.html),重新启动服务器以查看更改(http:// stackoverflow.com/questions/581038/python-web-programming)

我的问题是,Python 被广泛用于 Web 开发,为什么不能像 PHP 一样简单?

我很想写 index.py:

print """
<html>
<head>
<title>Hello world</title>
</head>
<body>
Hello world
</body>
</html>"""

【问题讨论】:

  • 因为你还没有做到。
  • @jeremyne​​albrown 这不是一个坏问题......我认为这是一个新的 Pythonista 试图找出他们缺少图片的哪一部分。我花了一点时间才找到使 Python 成为真正优秀的网络语言的部分。也许这个问题可以更好地表达......
  • 你是说只要别人为你做,你就会用它吗?
  • @IgnacioVazquez-Abrams 听起来您希望开发人员每次都重新发明轮子。我宁愿站在巨人的肩膀上:-D
  • @Endophage:我也是。这就是我使用 WSGI 的原因。

标签: php python


【解决方案1】:

首先你的问题是,为什么 Python 不像 PHP 那样容易进行 Web 开发:它不是为它设计的。 PHP 在使其成为编写 HTML 页面的好语言方面做了大量工作,包括用于 apache 的 mod_php。 Python,虽然它是一种非常强大的网络语言,但它的能力也远远超过 PHP。例如,Dropbox 的大多数软件,无论是桌面客户端还是服务器端代码都是 Python。我在日常工作中使用 Python,并使用它通过 Cython 将遗留的 C 代码集成到新的 Python 代码中。

继续前进。有许多 Python 框架可以让您的 Web 开发体验变得不那么复杂。专业人士和爱好者广泛使用的 2 个值得注意的是 Django 和 Pyramid(以前称为 Pylons)。作为一个新用户,我建议您从 Django 开始,这是一种很好的入门方式,并且可以随着您的经验增长而用于大型和复杂的网站(以及更多)。

您会发现 Django 和 Pyramid 包含“开发服务器”。这些是用 Python 编写的 Web 服务器,它们与框架打包在一起以实现更快的开发。使用这些开发服务器,您可以快速启动并运行。

还有一些纯 Python Web 服务器,它们实际上速度极快、功能强大且非常适合生产。要在非常好的 Python 服务器 Gunicorn 上部署 Pyramid 应用程序,只需在 Pyramid 配置中添加几行额外的代码。通常,您会通过 Apache 或 Nginx 反向代理这些纯 Python 服务器。

如果你想走 Apache 服务器路线,你只需要 mod_wsgi。使用 mod_python 或作为 CGI 服务 Python 站点是一种有点过时的方式。 WSGI 为 Python 定义了一个标准来处理 Web 请求,因此 mod_wsgi 使 apache 能够以预期的格式将请求传递给您的 Python 应用程序。

在将 Python 部署到托管服务提供商时,您必须比 PHP 托管更深入一些,但官方 Python wiki 上维护了一个 good list。底部的 4 个链接提供了不同的列表以满足您的要求。

【讨论】:

  • Endophage 的精彩总结。我只想补充一点,Python 新手在找到您提到的好东西后,在将站点部署到主机服务器时可能会再次感到失望。我发现我的预算主机提供商很容易适应 PHP,但不是 python。
  • @Smandoli 这是一个常见问题,但是,官方 Python wiki 维护了大量 Python 友好主机列表,我已在帖子末尾添加了它。
  • 有些地方可以免费托管 python 应用程序。我在回答中提到了一些。
  • @maSnun 确实有一些免费的选项。这取决于您需要或想要什么,您的经验水平以及您信任的人:-P
  • 付费主机也是如此。不? ;)
【解决方案2】:

[如果] Python 被广泛用于 Web 开发,为什么不能像 PHP 一样简单?即我很想写 index.py...

根据您的示例,

Python 可以像 PHP 一样简单。完成上述工作的最简单方法是使用 CGI(并调用你的文件 index.cgi 而不是 index.py,然后你的脚本就可以正常工作了。虽然你应该首先指定内容类型,如下所示:

print 'Content-type: text/html'

这在 PHP 和 Python 中同样适用。 Python's CGI module 会让您快速启动并运行。

就我阅读的内容而言,我必须使用 CGI、mod_wsgi 等来部署

你通常会选择其中一个,实际上你很可能会选择一个基于更现代的 WSGI 的框架,而不用担心底层的东西。但如果您不想这样做,则无需为这些低级接口费心。

重新启动服务器以查看更改

可能不会。必须重新启动服务器是框架和部署配置的限制,通常不需要。如果您使用mod_python,这可能适用,但通常不适用(例如,许多框架支持自动重新加载)。

Python 拥有丰富的 Web 开发资源。有准系统(例如 CGI、mod_wsgi)、轻量级系统(例如 CherryPy)和整个框架(例如 Zope)。您可以选择最适合您需求的一种。

能够创建一个简单的文件并产生一些输出可能有助于快速进行一些事情,但这并不是一个丰富、成熟、功能强大的框架的真正标志。当然,您可以立即开始显示某些内容,但是然后呢?突然之间,您将需要导入或编写 Web 框架提供的所有相同类型的功能。对于一个非平凡的网络应用程序,您需要非平凡的框架。

例如,Django 之类的东西将为您提供持久性框架、自动生成的管理界面、诱人的语言、URL 调度系统等等。您可以专注于您的应用程序逻辑,而不必担心较低级别的细节。 Django 是一个很好的起点,因为它有很好的文档,而且本教程会让你快速上手。

【讨论】:

    【解决方案3】:

    正如其他人所说,谷歌“python web framework”。有很多,它们都完全不同。为了让您以最快的速度开始(小时),我会查看bottle.py

    【讨论】:

      【解决方案4】:

      Python被广泛用于Web开发,为什么不能像PHP一样简单?

      因为 Hello World 无法扩展。因为 Python 不是 PHP。来自维基百科[1][2]

      • Python 是一种通用的高级编程语言
      • PHP 是一种通用的服务器端脚本语言,最初是为 Web 开发而设计的

      Python 很棒,python 对DRY 很友好。不幸的是,当谈到 Web 开发时,DRY 是不够的。如果您真的想(有效地)完成工作:don't reinvent the wheel。总结得很好here

      对我来说最大的耻辱似乎是,每个人目前都在一遍又一遍地重建这些东西,并将其合理化为某种秘密酱汁竞争优势,而实际上它是基础设施——真正应该标准化的东西,这样你就可以真正绕过去做新的有趣的事情。

      因此,如果您采用 python 方式,请使用正确的工具来完成正确的工作:

      是的,它比 hello world 更复杂,但请记住 there ain't no such thing as a free lunch。你是一个业余开发者,你不是一个专业的程序员一个系统管理员一个数据库管理员一个设计师和 系统架构师等。不要对stand on the shoulders of giants 太害羞,因为现在它是免费的。请不要构建a modern web app

      另外,PHP 不再像 [1][2] 那样流行,参见。 PHP's fractal bad designPHP hammer

      【讨论】:

        【解决方案5】:

        PHP 仅用于 Web 应用程序开发,更准确地说是用于构建个人主页(这就是 P、H 和 P 的来源)。另一方面,Python 是一种通用编程语言。它适用于很多事情(并且必须包括用于各种任务的各种电池)。因此,请不要期望 Python 的行为方式与 PHP 相同。

        独立的 python 脚本需要相当多的努力才能运行。我建议拿起一个网络框架。您可能想先学习 django (https://www.djangoproject.com/)。您可能还想尝试一下 Google App Engine。除了 heroku、dotcloud、nuagehq 和其他云主机,python(和 django)的部署非常简单和容易。

        希望您喜欢使用 Python 开发 Web 应用程序! :)

        【讨论】:

        • 顺便说一句,-1 垃圾邮件发送者似乎又来了...我发誓有人在跟踪我的答案,然后投票否决帖子上的每个人...
        • PHP 代表 PHP:超文本预处理器,对吧?
        • @Endophage 我很惊讶得到了反对票。现在解释了:)
        • @VictorKilo 是的,但它来自 Rasmus 第一次将它放在一起时的个人主页。不? :)
        • @maSnun 我为我明显的跟踪者道歉... :-P
        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2010-10-12
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 2013-04-29
        相关资源
        最近更新 更多