Python 有哪些好的 Web 框架,第1张

Django: 开源Web开发框架,它鼓励快速开发,并遵循MVC设计,开发周期短。

webpy: 一个小巧灵活的Web框架,虽然简单但是功能强大。

ActiveGrid: 企业级的Web20解决方案。

Karrigell: 简单的Web框架,自身包含了Web服务,py脚本引擎和纯python的数据库PyDBLite。

Tornado: 一个轻量级的Web框架,内置非阻塞式服务器,而且速度相当快

CherryPy: 基于Python的Web应用程序开发框架。

比较热门的是前两个,webpy小巧灵活适合初学,进而可以了解Django

如果解决了您的问题请采纳!

如果未解决请继续追问

前两天有小伙伴给我留言说:什么时候能出个Python框架的干货总结(本文列举只是一部分,并不包含所有Python框架),于是乎今天这篇文章孕育而生。(突然感觉自己很nice)

推荐一:Django(推荐学习:Python视频教程)

Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

优点:

开源框架,有完美的文档支持

解决方案众多,内部功能支持较多

优雅的URL,完整的路由系统

自助式的后台管理

缺点:

系统紧耦合,想用喜欢的第三方库来代替是非常难的,即使打了一些补丁用上了也会觉得非常别扭。

Django自带的ORM远不如SQLAlchemy强大。

Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现 Tag或Filter。

推荐二:Flask

Flask是一个用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数 据库、窗体验证工具。

优点:

Flask比Django更灵活,用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping对象关联映射),或者需要与不同的工作流和模板系统交互。

缺点:

Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。

推荐三:Scrapy

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

优点:

Scrapy是一个功能非常强大的爬虫框架,它不仅能便捷地构建request,还有强大的selector能够方便地解析response,然而它最受欢迎的还是它的性能,既抓取和解析的速度,它的downloader是多线程的,request是异步调度和处理的。这两点使它的爬取速度非常之快。

另外还有内置的logging,exception,shell等模块,为爬取工作带来了很多便利。

缺点:

scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取100个网站,并发及分布式处理方面,不够灵活,不便调整与括展。

推荐四:Tornado

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

优点:

Tornado擅长为需要严密控制异步网络细节的应用程序提供基础架构。例如,Tornado不仅提供内置的异步HTTP服务器,还提供异步HTTP客户端。因此,Tornado非常适合构建应用程序,例如Web scraper或bot,它们并行查询其他站点并对返回的数据进行操作。

缺点:

模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块。

推荐五:Web2py

web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容 Google App Engine。

优点:

Web2py最大的吸引力在于其内置的开发环境。当设置Web2py实例时,将获得一个Web界面,实际上是一个在线Python应用程序编辑器,可以在其中配置应用程序的组件。这通常意味着创建模型,视图和控制器,每个都通过Python模块或HTML模板进行描述。

缺点:

Web2py的一个重要限制是它仅与Python 2x兼容。首先这意味着Web2py无法使用Python 3的异步语法。如果你依赖于Python3独有的外部库,那么你就不走运了。但是,正在开展使Web2py Python3兼容的工作,并且在撰写本文时它已接近完成。

推荐六:Weppy

Weppy感觉就像Flask的简约风格和Django的完整性之间的中间标记。虽然开发Weppy应用程序具有Flash的直接性,但Weppy具有Django中的许多功能,如数据层和身份验证。因此,Weppy适用于从极其简单到适度复杂的应用程序。

优点:

Weppy的文档与框架本身具有相同的风格。它干净,可读,并且被人类消费。除了通常的“hello world”应用程序示例之外,它还包含一个很好的演练教程,可以让你创建一个微博系统作为初学者项目。

缺点:

虽然Weppy有一个扩展机制,但官方批准的附加组件列表很小,远小于Flask的扩展目录。

推荐七:Bottle

Bottle可以被认为是一种迷你烧瓶,因为它比其他“微框架”更加紧凑和简洁。由于其占地面积最小,Bottle非常适合包含在其他项目中或快速交付REST API等小型项目。

优点:

Bottle不需要像其他框架那样多的文档,但文档绝不是吝啬。所有关键的东西都适合单个(尽管很长)的网页。除此之外,还可以找到每个API的完整文档,如何在各种基础架构上进行部署的示例,内置模板语言的解释以及一系列常见配方。

缺点:

Bottle极简主义的一个后果是有些功能根本就不存在。不支持表单验证,包括CSRF保护等功能。如果要构建支持高度用户交互的Web应用程序,则需要自己添加它们。

更多Python相关技术文章,请访问Python教程栏目进行学习!

首先你需要知道一个Web应用基本的请求处理流程。以最简单最原始的动态网页为例,你点击链接(GET),提交表单(POST),就是与服务器端建立了连接之后发送了一个HTTP请求(RFC2616 51节,之后都以HTTP 11为例),里面至少有方法(动词,就是GET啦POST什么的,详见RFC2616第9节),地址(URL),HTTP版本,还可能带上Cookie(会话的一般实现机制),缓存相关的信息(RFC2616 13节),User-Agent串等等一堆信息。对于POST请求我们还有表单内容作为请求实体(RFC2616 72节),里面是你填写的表单内容。

于是我们有了一些关于请求的数据,不过现在一般来讲这些数据还在前端服务器(反向代理,比如nginx,暂且忽略掉负载均衡,反正是透明的,也不考虑裸WSGI容器直接扛请求的情况)的手上,还没有传进后端语言(这里是Python)。我们就针对每一种语言都有特定的机制,用来将HTTP的请求信息映射到相应的编程语言范畴,叫做Web服务器界面(Web server interface),通用如CGI/FCGI/SCGI,特定于某一语言如WSGI/PSGI/Rack/,特定于某一操作系统如ISAPI(这货还活着?),一些已经不再使用的就不提了。总之在Python世界里这就是WSGI(PEP 3333, Web Server Gateway Interface),它就定义了Python语言与Web服务器之间的界面。在WSGI里,

请求的处理过程被映射为对应用callable的调用(application(environ, start_response),知乎不支持inline代码块?);

请求信息被映射到environ字典中的相应键值,比如请求方法被映射到environ['REQUEST_METHOD'],请求的“相对路径”被映射到environ['PATH_INFO'](过度简化;暂且不提WSGI应用挂载点,框架层一般也不用关心这个,挂载WSGI应用一般是WSGI容器如gunicorn、uWSGI之类组件的工作);

发送响应头的动作被映射到调用start_response(status, response_headers)(不考虑可选的第三个参数异常信息);

返回响应数据被映射到application返回iterable的动作。

于是响应便从Python返回到Web服务器,再被发送回浏览器,浏览器将响应内容渲染,一个请求就完成啦。

有了这样的感性认识,那么我们作为Python Web开发框架的作者,要做的事情就是在WSGI规范的基础之上,提供尽可能便捷的开发手段和尽可能低的框架开销,也即我们的代码将要工作在WSGI与业务逻辑的中间层。架构上,Web开发框架或多或少都遵循MVC的设计模式(Django管它叫MTV,其实差不多)。同时,由于框架位于中间件的位置,加上其鼓励模块化与代码复用的性质,自然需要为常见的HTTP操作提供抽象。这里就可以展开一些话题:

请求路径到view/controller的映射,请求参数的解析(routing,也叫路由)。

正则匹配的方案,比如Django内置了一个简单的正则表达式解析组件,能解析一般常见语法的正则表达式,把capturing groups解析成位置参数,named capturing groups解析成关键字参数。

也有DSL的方案,比如Werkzeug的路由组件。

请求实体的处理。表单解析,配合Web服务器进行上传文件处理。

正常的urlencoded表单,JSON表单,text/plain数据,multi-part表单

multi-part附件,附件操作API

大文件上传(这个一般会被前端服务器保存在磁盘上的临时文件里,比方说nginx就是这么实现的)。

会话。HTTP是无状态(stateless)的,这个特点非常重要。如果没有会话,你连续做几个请求,却没有手段证明你们是同一个人/同一台机器(你完全可能是代理服务器)。

存储会话数据的会话后端(内存数据结构?文件?RDBMS?Redis?Memcache?)

安全机制(HMAC什么的,可以参考beaker的secure cookie实现)

请求处理流程中的会话中间件(从Cookie中提取会话,从query string中提取会话,从自定义头中提取会话,等等)

View/Controller界面。发挥你的创造力,用上你的工程经验。

Function-based or Class-based views 参考:Django, Bottle, webpy, Tornado等一票框架的做法

框架的可选机制与服务如何暴露,

装饰器?(比如@login_required 这种额外要求)

回调?(能想到的只有Tornado和Twisted这种异步框架做事情的方式,还有整个JS生态系统都是回调(不考虑Promise什么的)的思路)

传入应用(业务逻辑)层的数据结构如何设计?(HttpRequest等价物,名字可能记不清了)

响应数据结构如何设计?(HttpResponse等价物,同上)

数据库操作封装。Web应用基本都是数据为中心,这个组件非常有必要,也是撰写可复用代码必须的一环,毕竟光是框架抽象了,数据库操作还是裸SQL什么的,到时候生产环境一换(比如MySQL变pgsql)还不是傻眼。

关系型数据库。一站式解决方案参考:Django ORM、SQLAlchemy;轻量级解决方案参考各数据库Python绑定。

非关系数据库。各数据库Python绑定(pymongo, riak, redis-py之类),这个没什么可替代方案了,因为本来各种NoSQL库都是适应某一特殊需求设计的,没什么互相替换的必要,那意味着重新进行技术选型。

未完待续

接下来的内容:

主要响应AJAX/API请求的框架设计思路

Python下实时Web框架思路

框架设计哲学

框架性能分析方法

本人才疏学浅,大项目没做过,小项目也没怎么起飞过,请各位阅读我的观点时务必留心。读到最后非常感谢。

恰好我目前所在的项目,用的就是 NeoX,服务端用 MobileServer,这两个都以 Python 为核心。

很多人应该不了解所以简单说下,算是交流交流。

游戏服务端

完全 Python,没错,一行 C++ 都没有。

纯粹的 Python 有相当多的优势,各个项目组在分享经验的时候,常常说到 XXX 天不停服。

越是火的游戏,就越是一天 24 小时都有人玩,任何时候停服都是损失。

这时候热更的优势就体现出来了。

而用 Python 实现热更也是非常自然。

游戏客户端

核心引擎部分当然是 C++,但是提供的功能很少。

只有基本的渲染,和一些为了提升速度而用 C++ 实现的库,比如数学库。

所有的逻辑全部 Python 实现。

用惯了 Python 来写逻辑之后,是不太想用其他语言的。

你需要什么能力?

算法,数据结构,C++,系统结构,组成原理。。。

画风突变有木有,然而这就是现实,你需要校招表现好,才能去更好的平台发挥。

既然你有 ACM 的经验,那就好好利用这一点。

主流引擎?

Unity ,毫无疑问,Unity 在游戏圈就像 Python 一样流行。

如果你评估自己觉得进大厂很难,那么提前熟悉下 Unity 总没坏处。

推荐书籍?

校招的话,就是老生常谈的那些计算机专业书籍,相关回答已经很多了。

Unity的话,首选官网教程以及项目实践。

一定要看书的话,推荐 《Unity In Action》,目前最好的入门书籍。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Python 有哪些好的 Web 框架

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情