您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 吴忠分类信息网,免费分类信息发布

13个Python web框架比较

2024/1/24 10:06:22发布19次查看
python程序员有很多很好的选择来创建web应用程序和api;django,weppy,bottle和flask引领潮流。
如果正在开发一个web应用程序并且已经选择使用python作为构建它的语言,那么这是一个明智的选择。python的开发成熟度,强大的库以及广泛的实际应用使其成为web开发的必需。
现在是困难的部分:从众多可用的python web框架中选择一个。它们不仅数量在不断增长,而且很难找到最适合你的。如果你正在构建一个快速而又简单的rest api,那么你将不需要任何完整的面向用户的应用程序所需的管道和连接,该应用程序具有用户登录、表单验证和上传处理就可以了。
在本文中,我们将研究13种最广泛部署的python web框架。我们将关注每种web应用程序最适合构建哪种类型的web应用程序,并研究它们如何在以下六个方面相互竞争:
安装:设置不需要正式的框架项目(它可以简单地作为包含的模块放到现有的项目中)、启动所需的模板文件最少、或者带有某种预先配置的设置,这是多么容易或简单。
文档:几乎每一个像样的python项目都有文档,可以遍历设置、演示基本用例并提供关于api的详细信息。在这里,我们给这样的框架更高的分数:这些框架展示了如何在教程中创建整个应用程序,包括常见的配方或设计模式,以及超出职责范围(例如提供有关如何运行的详细信息) python变体(如pypy或ironpython)下的框架。
管理:这是相对得分,表示配置和维护框架需要做多少工作。默认情况下,工作量最小的框架得分更高。
原生能力:包含多少组件?得分较高的是那些为国际化,html模板和数据访问层提供原生支持的框架。还有一些框架使用python最近引入的异步i/o操作的原生支持。
安全性:提供原生安全措施(如跨站点请求伪造(csrf)保护和使用加密cookie的会话管理)的框架获得更高的分数。
可伸缩性:大多数python框架可以利用像gevent或gunicorn这样的项目来大规模运行。在这里,我们看一下提升可伸缩性的框架原生特性,如输出和页面片段缓存。
如果你对性能基准感到好奇,请查看techempower正在进行的一系列试验,这些试验比较了各种任务中的多个web框架,并将代码和方法发布到github并进行不断的重新评估。并非所有讨论中的框架都在那里进行了分析,但是可以很好地了解哪种框架在哪种负载下表现最佳。
我们将分析13个框架。其中五个:cubicweb,django,web2py,weppy和zope2,采用“控件”方法,包含你可以想象的web应用程序所需的大多数功能。其余八个框架: bottle,cherrypy,falcon,flask,pyramid,tornado,web.py和wheezy.web,提供更简约的外观,交易批量和完整性,简单易用。
让我们从重量级开始吧。
重量级的python web框架
cubicweb
cubicweb被称为“一个支持重用和面向对象设计的语义web应用程序框架。”这是一个有趣的系统,强调使用抽象和可重用的代码块称为“多维数据集”,但对于某些开发人员来说可能过于抽象或特殊。
多维数据集是具有模式(数据模型),实体(编程逻辑)和视图的软件组件。通过组合多个立方体,每个立方体执行自己的任务,可以通过重用自己的代码和其他代码来编写软件应用程序。
cubicweb的核心是提供每个web应用程序使用的基本搭建材料:用于数据连接和存储的“存储库”;用于基本http请求/响应和crud操作的“web引擎”;以及用于建模数据的模式。所有这些都在python类定义中描述。要设置和管理cubicweb的实例,可以使用类似于django的命令行工具。
cubicweb似乎没有使用python 3的原生异步功能。包含异步的一种迂回方式是使用cubicweb.pyramid模块将pyramid框架用作web服务器,并使用异步构造在pyramid上绘制。但是现在看起来更加直截了当。
要在cubicweb应用程序中获取或操作持久数据,可以使用关系查询语言(rql),它采用模糊的sql语法,但在w3c的sparql之后进行模式化。cubicweb的理由再次是抽象:rql提供了一种高度分离的路径来相互关联各种数据源。但是,随着它的实现,通过手动构建查询作为字符串,它可能会让习惯于orm的开发人员感到过时。
使用cubicweb还有其他障碍。首先,设置可能很麻烦。因为cubicweb有很多依赖项,所以最好使用pip install来获取所有依赖项。可能还必须在本地环境中执行一定数量的手动调整。这与运行pip install或将框架代码放入另一个项目的子文件夹的其他框架形成鲜明对比,这就是所需要的。
另一个潜在的问题是缺少本机模板引擎;生成html留给开发人员。可以通过使用像jinja2这样的第三方模板系统或选择为web ui提供工具的多维数据集来克服这个问题,例如boostrap html框架的工具。
cubicweb的一个长期问题,缺乏python 3支持,目前已经解决。截至2016年6月的版本3.23,cubicweb支持python 3,但twisted等模块本身并未完全移植。
与web2py一样,cubicweb将其冗长的文档称为“书籍”。它需要时间来解释cubicweb的不寻常方法,演示如何构建一些基本应用程序,包括api引用,并且通常不会特定的方式。
django
自django首次出现以来已经有十年,它已经成为python最广泛部署的用于创建web应用程序的框架之一。 django配备了你可能需要的大部分组件,因此它倾向于构建大型应用程序而不是小型应用程序。
经过多年在版本1.x后,django最近在小数点的左边创建了一个版本。 django 2.0中最大的变化是框架现在只适用于python 3.4及更高版本。理想情况下,你应该使用python 3.x,所以使用django的1.x分支的唯一原因是你遇到了旧版本的python。
django吸引力的一个关键部分是部署速度。因为它包含了开发普通web应用程序所需的许多部分,所以可以快速行动。路由,url解析,数据库连接(包括orm),表单验证,攻击保护和模板都是内置的。
将找到最常见的web应用程序方案的构建块。例如,用户管理可在大多数网站上找到,因此django将其作为标准元素提供。django本身具有这些功能,而不必创建自己的系统来跟踪用户帐户,会话,密码,登录/注销,管理员权限等。它们可以按原样使用或扩展,以包含最少量工作的新用例。
核心是bsd,一些组件是lgplv3。可通过zope.formlib获得;单独安装但作为项目的一部分支持。通过第三方扩展程序提供。
django具有健全和安全的默认设置,有助于保护web应用程序免受攻击。将变量放在页面模板中时,例如带有html或javascript的字符串,除非明确将变量实例指定为安全,否则不会按字面意义呈现内容。这本身就减少了许多常见的跨站脚本问题。如果要执行表单验证,可以使用从简单的csrf保护到返回详细错误反馈的完整逐个字段验证机制的所有内容。
如果没有强大的文档可以使用像django那样丰富和广泛的功能。django的文档站点从多个角度深入研究框架的各个方面。使用python 3或其他语言,正确的安全性,实现常见的web应用程序组件(如会话或分页),生成站点地图,它们都被覆盖。还详细描述了应用程序模型,视图和模板的每个层的api。
然而,强大的力量带来了极大的复杂性。django应用程序以其头重脚轻而闻名,具有许多移动部件。即使只有几条路线的简单django应用程序也需要相当多的配置才能运行。如果你的工作只是设置几个简单的rest端点,django几乎肯定是矫枉过正的。
django也有它的怪癖。例如,页面模板不能使用callables。示例:可以将{{user.name}}作为模板中的组件传递,但不能传递{{user.get_name()}}。这是django确保模板不会无意中做出令人讨厌的事情的方法之一,但如果你没有为它们做好准备,这些限制可能会很刺激。虽然有解决方法,但它们往往会对性能产生影响。
django的核心是同步。但是,添加异步行为的一种方法是通过django channels项目。这个项目是官方的django附加组件,它为django添加了对连接和套接字的异步处理,同时保留了django的编程习惯用法。
web2py
在ruby世界中,ruby on rails是事实上的web框架。depaul大学计算机科学教授massimo di pierro受到rails的启发,用python创建一个易于设置和使用的web框架。结果是web2py。
web2py最大的吸引力在于其内置的开发环境。当设置web2py实例时,将获得一个web界面,实际上是一个在线python应用程序编辑器,可以在其中配置应用程序的组件。这通常意味着创建模型,视图和控制器,每个都通过python模块或html模板进行描述。一些示例应用程序随附web2py。可以将它们分开来查看它们的工作方式,或将它们用作启动器模板来创建自己的应用程序。
开发人员通常只需下载源代码并使用它来部署web2py。但对于windows或macos上技术含量较低的用户,web2py的创建者提供的版本基本上是独立服务器。下载,解压缩并运行其中一个版本,将拥有一个内置web2py预配置副本的本地web服务器。这是一个很好的方法来创建一个web2py应用程序,然后可以部署其他地方。
web2py的web界面是使用bootstrap 2.16.1构建的,因此它易于操作并且易于导航。浏览器内编辑器不能替代完整的ide,但它配备了有用的辅助工具,如行编号和python语法高亮(包括自动缩进)。还包括一个python shell的快速web界面,因此如果需要,可以从命令行与web2py交互,这对专家来说是一个很好的让步。
web2py中使用的数据抽象系统与django的orm和受其启发的其他orm(例如peewee)略有不同。这些系统使用python类来定义模型,在web2py中,使用构造函数(如define_table)来实例化模型。这些差异中的大部分可能只会对那些已经有过经验并且开始使用另一个的人产生震动;他们对新人来说同样复杂。将web2py连接到数据提供者可能不会遇到任何麻烦,因为它几乎涉及现有的每个主要数据库。
一个真正有用的数据库相关功能是生成模型图的能力,更好地可视化模型之间的相互关系。但是,需要安装pygraphviz库才能启用该功能。
web2py通过对jquery和ajax的集成支持,提供许多其他专业级组件:国际化功能,多种缓存方法,访问控制和授权,甚至前端效果(例如,表单中的日期选择器)。虽然不允许使用中间件来替换核心web2py功能,但也包括外部和内部中间件的挂钩。
web2py的一个重要限制是它仅与python 2.x兼容。首先,这意味着web2py无法使用python 3的异步语法。如果你依赖于python 3独有的外部库,那么你就不走运了。但是,正在开展使web2py python 3兼容的工作,并且在撰写本文时它已接近完成。
毫无疑问,web2py的文档被称为“书”。首先,它涵盖了web2py,python以及用于这两者的部署环境的大量材料。其次,它以高度可访问的叙事风格书写。第三,它深入讨论了常见的应用程序构建方案。例如,有一整章使用jquery(与web2py捆绑在一起)来构建ajax应用程序。
weppy
weppy感觉就像flask的简约风格和django的完整性之间的中间标记。虽然开发weppy应用程序具有flash的直接性,但weppy具有django中的许多功能,如数据层和身份验证。因此,weppy适用于从极其简单到适度复杂的应用程序。
乍一看,weppy代码看起来很像flask或bottle代码。启动和运行基本的单路网站需要很少的指示。路径可以通过函数装饰器(简单方法)或以编程方式描述,并且这样做的语法与flask/bottle密切相关。除了语法的微小变化外,模板的工作方式大致相同。
weppy与其他框架形成鲜明对比,包括它们仅作为插件或附加组件包含的一些功能。例如,flask和bottle都没有内置的orm或数据管理系统。weppy包含一个orm,虽然它是基于pydal项目而不是更受欢迎的sqlalchemy。weppy甚至支持模式迁移,django支持模式迁移作为其orm的一部分(同样,django的迁移系统也更加自动化)。虽然weppy有一个扩展机制,但官方批准的附加组件列表很小,远小于flask的扩展目录。
像weppy这样的轻量级框架通常用于构建restful api,而weppy则为此配备了便利功能。在路由上放置一个@service修饰器,返回的数据将自动格式化为选择的json或xml。
weppy包含的其他功能更符合更大的框架,但它们是在没有批量的情况下实现的。示例:数据验证机制,表单处理,响应缓存和用户验证。在所有这些情况下,weppy采取“恰到好处”的方法。提供的功能并不像在django大小的框架中那样完整,但开发人员不需要投入大量精力来使它们变得有用,并且它们可以在事后得到扩展。
weppy中发现的另一个通常与更重量级框架相关的功能是国际化支持。模板中的字符串可以根据应用程序提供的区域设置文件进行翻译,这些文件是简单的python字典。也可以通过解析浏览器请求(即accept-language http标头)或将翻译绑定到特定路由来设置语言选择。
weppy的文档与框架本身具有相同的风格。它干净,可读,并且被人类消费。除了通常的“hello world”应用程序示例之外,它还包含一个很好的演练教程,可以让你创建一个微博系统作为初学者项目。
weppy的长期计划包括支持异步和套接字作...
吴忠分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录