龙空技术网

Python的8大成熟Web框架概要简介(二)

传新视界 246

前言:

而今看官们对“python技术栈”大体比较着重,朋友们都需要了解一些“python技术栈”的相关文章。那么小编也在网络上汇集了一些有关“python技术栈””的相关内容,希望姐妹们能喜欢,大家一起来了解一下吧!

本文由牛旦课堂原创编译

编译者:墨子老师

参考链接:

本文Python的8大成熟Web框架概要简介接续上一篇,继续为亲爱的#程序员#们或IT的工程师提供一种直观的介绍,以便在实际技术选型时略做参考以兹帮助。

前一篇请参考:Python的8大成熟Web框架-1。接下来,继续介绍下半部分。

说明:标题编号还是从1开始。

1. Flask框架

许多关于Python web框架的讨论都从Flask()开始,这是有原因的。Flask构建良好,易于理解的框架,很容易使用并且很稳定。在轻量级web项目或基本REST API中使用Flask几乎是不可能出错的,但是如果您试图构建任何更大的东西,你将会面临很大的负担。

Flask的主要吸引力在于它的低门槛。一个基本的“hello world”应用程序可以用不到10行Python代码完成。Flask包含了一个广泛使用的HTML模板系统Jinja2,它可以使文本的渲染更加容易,但是Jinja2可以被替换为任意数量的其他模板引擎(比如Mustache:),或者您也可以使用自己的模板引擎。

Flask版Hello World 应用:

from flask import Flaskapp = Flask(__name__) @app.route('/')def hello_world():    return 'Hello, World!'

把这个保存为hello.py或其它不是flask.py的文件,然后就可以按照一定的模式来运行程序了:

$ export FLASK_APP=hello.py$ flask run * Running on 

或者在windows下

命令行窗口:C:\path\to\app>set FLASK_APP=hello.pyPowershell:PS C:\path\to\app> $env:FLASK_APP = "hello.py"

或者可以使用 python -m flask:

$ export FLASK_APP=hello.py$ python -m flask run * Running on 

(详情可以参考官网进一步了解)

出于简单性的考虑,Flask省略了一些细节,比如数据层或者ORM,并且没有提供类似表单验证的功能。然而,Flask可通过扩展支持机制进行扩展,已有的扩展有几十个,覆盖了许多常见的用例场景,比如缓存,表单处理和验证,以及数据库连接。这种缺省设计允许你以绝对最小的功能开始设计一个Flask应用程序,然后在你需要的时候将它们分层。

Flask的文件是亲切和容易阅读。快速开始文档很好地帮助您入门,同时还解释了简单的Flask应用程序的默认选择的重要性,并且API文档中有很多很好的例子。同样优秀的还有Flash示例片段的集合,是一些如何完成特定任务的快速而粗糙的示例,例如,如果对象存在如何返回,或者如果对象不存在,如何返回404错误。

在2018年,Flask发布了具有里程碑意义的1.0版本,其中Python 2.6和Python 3.3是最小的支持版本,并且它的许多行为最终都是固定不变的。Flask不显式地支持Python的异步语法,但是一个API兼容的Flask变体Quart已经被分离出来以满足这个需求。

2. Pyramid框架

小巧轻便的Pyramid()非常适合于一些这样的任务,比如将现有的Python代码作为REST API公开,或者为开发人员承担大部分繁重工作的web项目提供核心支持。

“Pyramid会让你迅速变得富有成效,并与你一起成长,”文档简述中说。“当你的应用程序很小的时候,它不会阻碍你;当你的应用程序变大的时候,它也不会妨碍你。”

描述Pyramid的极简主义的一个好方法是“不受策略约束”,在文档中讨论Pyramid如何与其他web框架相比较的部分使用了这个术语。基本上,“无策略”意味着您选择使用哪种数据库或哪种模板语言不是Pyramid所关心的。

建立一个基本的Pyramid应用程序需要非常少的工作。与Bottle和Flask一样,除了框架本身的文件外,Pyramid应用程序可以由单个Python文件组成。一个简单的单路由API只需要十来行代码。大部分都是样板文件,比如…import语句和设置WSGI服务器。

默认情况下,Pyramid包括一些在web应用程序中常见的事项,但它们是作为组件提供的,并将其拼接在一起,而不是作为成熟的解决方案。例如,对用户会话的支持甚至附带了CSRF保护。但对用户帐户的支持,如登录或帐户管理,不在处理的一部分。你必须自己处理它或通过插件来添加支持它。表单处理和数据库连接也是如此。

Pyramid甚至提供了一种从以前的Pyramid项目创建模板的方法来重用以前的工作。这些被称为“脚手架”的模板生成了一个金字塔应用程序,具有简单的路由和一些初始HTML/CSS模板。捆绑的脚手架包括一个示例启动程序项目和一个通过流行的Python库SQLAlchemy()连接到数据库的项目。

Pyramid体贴入微的测试和调试工具提供了优秀的功能。在Pyramid应用程序中捆绑debugtoolbar扩展组件,你可在每个网页上得到一个可点击的图标,它会生成应用程序执行的详细信息,包括发生错误时的详细回溯。还提供了日志记录和单元测试。

Pyramid的文件是优秀的。除了对基础知识的快速浏览和教程风格的演练外,还可以找到一组社区贡献的教程和一本常见食谱式的“烹饪指南”书。后者包括了针对一系列目标环境的部署技术,从谷歌App Engine到Nginx。

Pyramid同时支持python2和python3,但是不使用python3的异步语法。如果想在Pyramid中利用异步,请参阅aiopyramid项目,它包括一个用于异步驱动的“hello world”应用程序的脚手架。

应用示例代码如下:

from wsgiref.simple_server import make_serverfrom pyramid.config import Configuratorfrom pyramid.response import Response def hello_world(request):    return Response('Hello World!') if __name__ == '__main__':    with Configurator() as config:        config.add_route('hello', '/')        config.add_view(hello_world, route_name='hello')        app = config.make_wsgi_app()    server = make_server('0.0.0.0', 6543, app)    server.serve_forever()

3. Sanic框架

Sanic为快速和简单而设计,与Python 3.6或更高版本一起工作,并使用Python的async/await语法(从Python 3.5开始可用)来让您创建高效的web应用程序。

与Flask或Bottle一样,一个基础的Sanic程序“hello world”大约需要运行10行代码,其中大部分是导入和其他样板文件。关键的区别是,应用程序路由必须声明为异步定义函数(async def functions),并且必须在异步代码中使用await来调用这些函数。如果您以前编写过异步驱动的应用程序,那么你应已经掌握了最困难的部分。

Sanic用于处理连接和响应的许多机制大家都很熟悉。请求和响应只是具有相似属性的对象,比如上传的文件、表单、JSON对象、头等等。

具有许多路由的应用程序变得难以管理。Sanic用“蓝图(blueprints)”来解决这个问题,这些对象可以描述一组路由,并允许你通过高级界面来管理它们。不用显式地编写每个路由,也不用使用过多的带变量的路由,你可以编写一些蓝图来描述路由在你的应用程序中是如何工作的(例如,/object/object_id/action)。蓝图可以有通用的中间件,如果您想将管理功能应用到某些路由而不是其他路由,那么这是非常有用的。

Sanic还可以处理HTTP以外的协议。WebSocket端点只需要不同的装饰器和更多的内部逻辑(例如,等待和处理响应)。可以通过子类化asyncio.protocol来支持自定义网络协议。

Sanic故意省略了数据库连接和HTML模板等功能,而保留了用于插入这些功能的特性:中间件、集中式应用配置,等等。

示例代码如下:

from sanic import Sanicfrom sanic.response import json app = Sanic("App Name") @app.route("/")async def test(request):    return json({"hello": "world"}) if __name__ == "__main__":    app.run(host="0.0.0.0", port=8000)

4. Tornado框架

Tornado()是另一个针对特定用例的微型框架:异步网络应用程序。Tornado非常适合创建那些打开大量网络连接并使其保持活力的服务——即任何涉及WebSockets或长轮询的服务。Tornado 6.0需要Python 3.5或更高版本,完全不支持Python 2。

像Bottle 或 Falcon一样,Tornado忽略了与它的中心目的无关的特征。Tornado有一个用于生成HTML和其他输出的内置模板系统,并提供了用于国际化、表单处理、cookie设置、用户身份验证和CSRF保护的机制。但是它忽略了一些主要用于面向用户的web应用程序的特性,比如表单验证和ORM。

Tornado擅长为需要对异步网络进行严密控制的应用程序提供基础设施。例如,Tornado不仅提供一个内置的异步HTTP服务器,而且还提供一个异步HTTP客户机。因此,Tornado非常适合构建并行查询其他站点并对返回的数据进行操作的应用程序,例如网络爬虫或网络机器人(web scraper或bot)。

如果您想创建一个使用HTTP以外的协议的应用程序,Tornado已经为您提供了帮助。Tornado提供对诸如DNS解析器等实用程序的低级TCP连接和套接字的访问,以及对第三方认证服务的访问,它还通过WSGI标准支持与其他框架的互操作。文档虽小但并不稀疏宽泛,其中包含了实现所有这些特性的丰富示例。

Tornado利用并补充了Python用于异步行为的本机功能。如果您使用的是Python 3.5, Tornado支持内置的async和await关键字,这可以提高应用程序的速度。您还可以使用futures或回调来处理对事件的响应。

Tornado提供了一个同步原语库(信号量、锁等)来协调异步协程之间的事件。请注意,Tornado通常运行为单线程模式,因此这些原语与它们的线程名称不同。但是,如果您希望在并行进程中运行Tornado以利用多个套接字和内核,那么可以使用一些工具来实现这一点。

Tornado的文档涵盖了框架中的每个主要概念以及模型中的所有主要api。尽管它包含一个示例应用程序(一个web爬虫),但它主要用于演示Tornado的排队模块。

应用示例代码如下:

import tornado.ioloopimport tornado.web class MainHandler(tornado.web.RequestHandler):    def get(self):        self.write("Hello, world") def make_app():    return tornado.web.Application([        (r"/", MainHandler),    ]) if __name__ == "__main__":    app = make_app()    app.listen(8888)    tornado.ioloop.IOLoop.current().start()

另外,相比前面小而美的框架较而言,Django( )是个完整的技术栈了,基本有各种支持,悠久而庞大,这里没有提出来更多介绍。概而言之,Django是一个高级Python Web框架,它鼓励快速开发和干净、实用的设计。它由经验丰富的开发人员构建,解决了Web开发中的许多麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的,学习曲线相对来说较高,有兴趣的可以去官网详细研究一下。

5.小结

本篇主要介绍了Python成熟的8大Web框架的另外4个,以为Python技术栈的Web框架选项时,提供一个总体性参考。其中部分框架提供了一体化的解决方法,当然没有普适性完美框架,具体选型,还是要根据自己的实际情况进行适当抉择,感兴趣的朋友可以到文中提供的网址一探究竟。

如果网友还有其它的优秀框架,请推荐分享一下哦~ ^_^。

本文就介绍到这里了,另外,请顺手搞个3连发:点赞、转发和关注。谢谢啦^_^

标签: #python技术栈 #python常用技术栈 #python web技术栈