Python Web 框架

Web 应用框架

Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。

Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。

Full-Stack 框架

一个 Web 框架的构成部分包括,基本的 HTTP 应用服务器、数据库之类的存储机制、模版引擎、请求分发、认证模块和 AJAX 工具

这些部分可以是独立的 Web 组件,也可以是包含在上层框架中提供

常用框架有:Django、TurboGears、web2py

Non Full-Stack 框架

这些项目提供了简单的可单独运行的应用服务器,或者在 Apache 等环境下运行

虽然只提供了技术栈中的一部分功能,但可以支持引入自定义的模版引擎和其它组件

常用框架:Bottle、CherryPy、Flask、Hug、Pyramid

比较

Flask是一个面向简单需求小型应用的“微框架(microframework)”。

Pyramid和Django都是面向大型应用的,但是有不同的拓展性和灵活性。

Django 文档最完善、市场占有率最高、招聘职位最多。Django目的是囊括web应用的所有内容,大包大揽,用它来快速开发一些Web运用是很不错的。缺点主要源自坚持自己造所有的轮子,整个系统相对封闭

Pyramid的目的是更灵活,能够让开发者为项目选择合适的工具。这意味着开发者能够选择数据库、URL结构、模板类型等等。

一、整体设计方面

Django 提供一站式的解决方案,从模板、ORM、Session、Authentication 等等都分配好了,连 app 划分都做好了,总之,为你做尽量多的事情,而且还有一个 killer 级的特性,就是它的 admin,配合 django-suit,后台就出来了,其实最初 Django 就是由在新闻发布公司工作的人设计的。
Flask 只提供了一些核心功能,非常简洁优雅。它是一个微框架,其他的由扩展提供,但它的 blueprint 使它也能够很方便的进行水平扩展。

二、路由设计

Django 的路由设计是采用集中处理的方法,利用正则匹配。
Flask 也能这么做,但更多的是使用装饰器的形式,这个有优点也有缺点,优点是读源码时看到函数就知道怎么用的,缺点是一旦源码比较长,你要查路由就不太方便了,但这也促使你去思考如何更合理的安排代码。

三、应用模块化设计

Django 的模块化是集成在命令里的,也就是说一开始 Django 的目标就是为以后玩大了做准备的。每个都是一个独立的模块,为以后的复用提供了便利。
Flask 通过 Blueprint 来提供模块化,自己对项目结构划分成不同的模块进行组织。

四、配置

Django 的配置主要还是靠 settings.py 来做,当然为了 Development 和 Production 环境分离,还有一些方法来处理配置。
Flask 的配置很灵活,有多种方法配置,不同环境的配置也非常方便。

五、文档

两者都提供了详尽的文档,Flask 的文档风格很受我个人喜好,Django 的文档也非常优秀,当时用学 Django 时,就是只看了 Django 的文档。

六、社区

Django 社区很大,各种插件很齐全,大部分情况下你都能找到你想要的。
Flask 起步晚,但社区也不小,之前有一次看在 github 上的 star 数,两个相差并不远,说明越来越多的人关注它,虽然插件没那么全,但常用的还都是有的,而且质量都比较高。

1、Django

优点

  • 完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Django book)。
  • 全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。
  • 强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。
  • 自助管理后台,admin interface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

缺点

  • 系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。
  • Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。
  • URL配置虽然强大,但全部要手写,这一点跟Rails的Convention over configuration的理念完全相左,高手和初识Django的人配出来的URL会有很大差异。
  • 让人纠结的auth模块,Django的auth跟其它模块结合紧密,功能也挺强的,就是做的有点过了,用户的数据库schema都给你定好了,这样问题就来了,比如很多网站要求email地址唯一,可schema里这个字段的值不是唯一的,纠结是必须的了。
  • Python文件做配置文件,而不是更常见的ini、xml或yaml等形式。这本身不是什么问题,可是因为理论上来说settings的值是能够动态的改变的(虽然大家不会这么干),但这不是最佳实践的体现。

2、Flask

  • Flask 确实很 “轻”,不愧是 Micro Framework,从 Django 转向 Flask 的开发者一定会如此感慨,除非二者均为深入使用过 Flask
  • 自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的 Python 库
  • 入门简单,即便没有多少 web 开发经验,也能很快做出网站 非常适用于小型网站 非常适用于开发 web 服务的 API
  • 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验 各方面性能均等于或优于 Django Django
  • 自带的或第三方的好评如潮的功能,Flask 上总会找到与之类似第三方库 Flask 灵活开发,Python 高手基本都会喜欢
  • Flask,但对 Django 却可能褒贬不一 Flask 与关系型数据库的配合使用不弱于 Django,而其与 NoSQL
  • 数据库的配合远远优于 Django Flask 比 Django 更加 Pythonic,与 Python 的 philosophy
    更加吻合

3、Pyramid

参考

1、https://wiki.python.org/moin/WebFrameworks
2、python 库 Django,Flask 各有什么用途?
3、Django 和 Flask 这两个框架在设计上各方面有什么优缺点?
4、Django vs Flask vs Pyramid: Choosing a Python Web Framework
5、浅谈Python web框架
6、Why so many Python web frameworks?

-eof-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值