我的第一个 Web 应用程序(Python):使用 CGI 还是 Django 之类的框架?

Posted

技术标签:

【中文标题】我的第一个 Web 应用程序(Python):使用 CGI 还是 Django 之类的框架?【英文标题】:My first web app (Python): use CGI, or a framework like Django? 【发布时间】:2012-06-02 09:34:28 【问题描述】:

我不想用细节来给大家带来负担,但基本上我是一名 2 年级的 compsci 学生,没有 Web 开发经验。

基本上,我想创建一个小型“网络应用程序”,它接收来自 html 表单的输入,让 python 脚本执行一些计算,然后在浏览器中重新显示这些结果。

截至目前,我已经构建了表单和脚本。但是,当我尝试测试表单时,我的浏览器没有运行脚本,而是尝试下载它。据我了解,这是一个 cgi 脚本问题,我必须创建一个 Web 服务器才能测试此脚本。

这就是我被困住的地方。我对 Web 服务器以及如何设置它们知之甚少。最重要的是,我听说 GCI 脚本已经成为过去,并且需要大量开销才能正常运行。

这引出了我的问题。如何完成我的应用程序并测试我的 cgi 脚本?我是安装 apache 并弄乱它还是应该研究像谷歌应用引擎这样的东西?是否有其他方法可以在没有 cgi 脚本的情况下完成此任务?像 Django 这样的框架在哪里适合?

【问题讨论】:

这里有点错误的二分法:Django 和 CGI​​ 之间有很多领域。我个人推荐 webapp2,它与 App Engine 捆绑在一起,非常轻量级。仅供参考,在现代(Python)架构上相当于 CGI 的低级是 WSGI。 【参考方案1】:

Django,虽然很好,包罗万象并且得到很好的支持,但有时对于小型 Web 应用程序来说太过分了。 Django 希望你从一开始就遵守它的规则,如果你不需要它们,你必须避免使用数据库和管理面板之类的东西。使用 Django 也更容易遵循其项目布局,即使它对于简单的应用程序来说过于复杂。

所谓的微框架可能更适合您的小型应用程序。它们建立在相反的原则之上:现在使用最少的功能,根据需要添加更多功能。

Flask 基于 Werkzeug WSGI 库和 Jinja2 模板(后者是可切换的),有大量文档(使用 notes concerning virtualenv and stuff),非常适合小型和大型应用程序。它捆绑了一个自动重新加载的开发服务器(您的开发机器上不需要 Apache)和 Werkzeug 驱动的交互式调试器。有诸如HTML forms 和database ORM 之类的扩展。

Bottle 与微框架一样小,由 1(一个)文件组成,包括开发服务器。将其放入您的项目文件夹并开始破解。内置的 SimpleTemplate 模板引擎是可切换的,但与 Flask 相比,开发服务器更加脆弱。文档不太完整,而且在我看来,整个东西不如 Flask 精致和方便。

在这两种情况下,您都在本地使用开发服务器,然后使用 WSGI 进行部署,WSGI 是两个框架都支持的 Python Web 应用程序的服务器接口。部署 WSGI 应用程序的方法有很多,Apache mod_wsgi 是流行的方法之一。

除非一个依赖项(Bottle)优于三个(Flask、Jinja2 和 Werkzeug),否则我完全会使用 Flask。

(还有很多其他的框架,所以等待他们的用户来告诉他们。我建议避免使用web.py:它可以工作,但充满魔力,并且与 Flask 或瓶子。)

【讨论】:

【参考方案2】:

快速开始使用 webapp 的一种方法是先了解然后修改,例如 App Engine "guestbook" 示例。这样做的好处是为您完成了运行 Web 服务器和设置数据库服务器(假设您需要持久性)的许多其他必要的乏味工作。 App Engine 还提供了相当灵活的开发环境。这当然不是唯一的方法,我承认在推荐它时会有偏见,但它的阻力相当小。

GCI 脚本几乎不会成为过去,尽管这不是酷孩子们正在做的事情。 CGI 具有暴露更多原始管道的好处和诅咒。它迫使您了解很多关于原始(低级意义上的)Web 架构的知识,但如果您有一个可以通过更简单的方式解决的直接问题,那么它也有点让人难以理解。

【讨论】:

【参考方案3】:

现在看来,大多数 Python Web 开发似乎都是由框架完成的。这有几个原因:

    大量成熟的工具。 Django 内置了用户身份验证、内置数据库管理、内置会话、几乎所有的 ORM 功能,让您可以无缝支持多个数据库。

    内置网络服务器。像 django 和 pylons 这样的大型 Python 框架已经内置了网络服务器。 Django 有一个非常简单的网络服务器python manage.py startserver(就这么简单),这使得创建和调试应用程序变得非常容易。它是单线程的,因此将调试器放入其中很轻松

    庞大的社区。如果你有一个 django 问题,它会很快得到回答,所以社区很大。

django 教程将向您介绍开发的所有主要方面。它只有 4 页,与阅读、学习和摆弄 apache 设置相比,您将能够让您的应用程序运行起来简单得多。 https://docs.djangoproject.com/en/dev/intro/tutorial01/

虽然如果你的应用程序只是一个表单和一个脚本来处理它,那么现在的 django 可能有点过分了。由于其无缝的测试框架,它很容易发展任何项目。我从未使用过烧瓶或瓶子或其他微框架,但我会记住您的项目将来会在哪里。

至于 django 适合的地方,它是一个完整的堆栈框架,包括演示(模板)、数据管理(服务器 orm)、身份验证、中间件、表单……创建一个完全包容的 Web 应用程序所需的一切。 Django 和几乎所有其他 python 框架都实现了 wsgi 标准。它是一个允许网络服务器之间互操作的接口。 http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface 它非常干燥,您永远不必直接连接它。这就是这些框架在后台所做的事情。

【讨论】:

【参考方案4】:

如果您可以使用应用引擎,为什么还要设置和维护自己的网络服务器。它有一个优秀的 SDK 来测试你的代码。这是一个例子https://developers.google.com/appengine/docs/python/gettingstarted/handlingforms

你会在这里找到 Django:https://developers.google.com/appengine/docs/python/gettingstarted/templates 我更喜欢用 Jinja 做模板。

【讨论】:

【参考方案5】:

Django 带有自己的服务器,但在您的情况下,我会推荐 apache 和 mod_python,因为它似乎是您正在构建的一个相当简单的站点。

设置 Apache 轻而易举,只需在网络上进行简单搜索即可满足您的所有需求。 您可以在 mod_python here 上找到更多信息,阅读一下它,然后在符合您需要的教程之后搜索 Google。

【讨论】:

推荐mod_python 总是一个坏主意。它已被 mod_wsgi 弃用。 "目前 mod_python 没有在积极开发中。这并不意味着它像某些人声称的那样“死”了。这意味着代码和项目在需要很少的情况下已经足够成熟维护它。” docs.djangoproject.com/en/1.3/howto/deployment/modpython - 对 mod_python 的支持已被弃用,并将在 Django 1.5 中删除。如果您要配置新部署,强烈建议您考虑使用 mod_wsgi 或任何其他受支持的后端。 是的,但如果你想在 django 中使用 mod_python。对于这个项目,这很可能是矫枉过正。我的回答是我声明@user1420636 应该使用 apache 和 mod_python,只是因为我认为这是最容易设置的,而不是 apache、django 和 mod_python。 mod_python 项目尚未处于积极开发阶段,以至于网站从未更新到真实状态。 mod_python 的名义所有者和控制网站的人,在所有开发停止之前就停止了对它的工作,也不想完全承认它的时代已经过去。

以上是关于我的第一个 Web 应用程序(Python):使用 CGI 还是 Django 之类的框架?的主要内容,如果未能解决你的问题,请参考以下文章

我的第一个python web开发框架(16)——产品分类管理

我的第一个python web开发框架(18)——前台页面与接口整合

我的第一个python web开发框架——怎么开始?

我的第一个python web开发框架(21)——小结

我的第一个python web开发框架(11)——工具函数包说明

我的第一个python web开发框架(15)——公司介绍编辑功能