3

从一个月前我开始学习 Python,我发现这门语言简单而有用。

我是一名 Web 开发人员,但我只有 PHP 经验,我使用过像 CakePHP 或 Zend 这样的框架。我熟悉 Django,它是最受欢迎的。但是,Django 与 Python 3 不兼容。

有人知道支持 Python 3 的 Python Web 框架吗?我应该考虑使用没有框架的纯 Python 吗?如果是个好主意,我应该使用哪个网络服务器?Nginx 带有反向代理,如 uwsgi 或 Gunicorn,为什么?

4

1 回答 1

5

Django 的最新稳定版本是 1.5,它确实支持 Python 3。请阅读公告:https ://docs.djangoproject.com/en/dev/topics/python3/

Django 1.5 是支持 Python 3 的 Django 的第一个版本,因此您可以预料到比以前版本更多的错误,这些版本在 Python 2 支持下非常可靠。但是 Django 核心团队对于合并来自社区的补丁非常认真,所以这应该没什么大不了的。

一般来说,您还有三个非常著名的 Python 网络框架:Flask、Bottle 和 Pyramid。前两个是针对极简主义的。Bottle 只是一个 Python 文件。我可以肯定地说,Bottle 只是 WSGI 服务器之上的一个包装器,它添加了路由功能。差不多就是这样。如果您想要最少的功能并从头开始构建一切,请使用 Bottle。这通常是非常轻量级的 API Web 服务的理想选择。

Flask 是新的著名人物。它比瓶子重,但仍然非常简约。Pyramid 通常是 Django 的直接竞争对手。Pyramid 没有 ORM 或硬集成的模板引擎。默认情况下,您可以使用 Mako 或 Chameleon 来构建前端模板。没有 ORM 意味着您不仅限于关系数据库。Django 的 ORM 是对象关系映射器,因此它绑定到关系数据库,如 MySQL、PostgreSQL 或 MariaDB 或其他 RDMB。如果您想使用非关系型 (NoSQL) 的 MongoDB,那么您就大错特错了。你不能从使用 Django 的 ORM 中受益。Pyramid 允许您使用 SQLAlchemy 或其他 ODM(NoSQL 的对象文档映射器)而不是 Django 中的硬集成 ORM。

此时将 Python 3 与任何 Python web 框架一起使用的问题是大多数 Python web 框架生态系统(无论是 Django 的生态系统、Flask 的、Pyramid 的)都与 Python 3 不兼容。许多最流行的 Django 应用程序不兼容声称支持 Python 3,因此如果您想使用这些应用程序来构建您的 Django 网站,您将不走运。

但是对于 1.5,我认为生态系统将迅速转向兼容 Python 3 的支持。如果您对 Python 足够熟悉,请查看 Flask 或 Pyramid。我喜欢 Pyramid,因为它带有您可以采用的身份验证策略。我们一直在使用 Pyramid 来构建我们的 web api 服务。如果你构建一个前端,Django 很好。我仍然会将我的 API 网络服务留在 Pyramid 或 Flask 中。

一般来说,你应该避免使用 Apache + mod_wsgi。大多数人不知道如何调整 Apache 以高效运行。默认情况下,Nginx 将为您提供高吞吐量和高效的工作 CPU 内存消耗。是的。我建议使用 Gunicorn。

你是什​​么意思纯Python?所有的 Web 框架都是用 Python 构建的。好吧,我可以详细介绍一下大多数人使用的 Python 称为 CPython。Python还有其他实现。Python 语言的实现可以是 C、C++、Java、Ruby、.NET 甚至 PHP。CPython 是 C。为了让你有点困惑,有一个 Python 编程语言“PyPy”的实现,它在 Python 中实现了 Python 语言。

好的。让我结束这一点:这可能不是你所指的。如果您想自己构建一个网络框架,那很好。您只需要了解 WSGI 是如何工作的,拥有一个基于 URL 的正则表达式中间件将请求分派到视图函数就可以了。这实际上是所有现代 Python 网络框架的需求。上学期我写了一个虚拟的(虽然很可怕)。

于 2013-05-01T08:02:15.970 回答