23

一网打尽,汇总常见Python的Web开发框架

 4 years ago
source link: http://developer.51cto.com/art/202002/611003.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在今天,Python里有很多开发框架用来帮助你轻松创建web应用。web开发框架存在的意义就在于可以快速便捷的构建应用,而不用去在意那些没必要的技术细节(协议、报文、数据结构)。

到2020年为止,基于Python创建的的web应用已经非常多了,国外知名的有youtube.com、instagram、reditt、国内有知乎、豆瓣等等。这些网站分别用到了不同的web框架来实现的,我们今天会一一讲到。

VZBjU3J.jpg!web

1. Django

rMjMZjF.jpg!web

Django应该是Python最知名、最有代表性的Web框架了。它的名字来自于Django Reinhardt,一位法国作曲家和吉他演奏家。在2000年初有一个报社的两位程序员为了给报社的报纸开发线上应用,开始用 Python编写网站,最后把他们的工作总结出一套开源框架,就是今天的Django了。

Django遵循了MVC开发模式,并将这个模式命名为MTV(MTV模式是Python中独有的)

  • M Model(数据模型,用于后端数据库模型定义和处理模块)
  • T Templates(模版,用于前端显示信息)
  • V View(视图,用于接收客户端请求、处理Model、渲染返回信息给客户端等)

(1) Django的优点和缺点

优点:

  • 一站式开发解决方案,拧包入住
  • 各种组件集成高度成熟,配置齐全
  • 用户模型、权限认证体系健全
  • ORM数据库管理功能简单方便
  • 自带后台管理功能

缺点:

  • 配置相对复杂
  • 简单应用采用Django有一种杀鸡用牛刀的感觉

(2) Django安装和初始化

Django下载方式有两种:

  • 通过pip直接安装
pip install Django==3.0.3 
通过源码下载并安装
git clone https://github.com/django/django.git 

安装之后通过startproject参数创建一个新的django项目 test_django/

django-admin.py startproject test_django 

cd test_django进入项目路径输入启动服务命令即可启动一个最简单的django服务。

python manage.py runserver 

NjIjUjV.jpg!web

最后访问下默认路径 http://127.0.0.1:8000 看看django项目启动的效果。

2ErQzyI.jpg!web

启动成功,现在可以编写你的Django代码了。

2. Flask

7vQz6vJ.jpg!web

如果说Django是大而全的方案代表,那么Flask就是小而精的方案代表。

Flask是基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的Web小应用。

Flask这个框架相对比较灵活,核心思想是Flask只完成基本的功能,别的功能都是靠各种第三方插件来完成的,实现了模块高度化定制。

(1) 常用的Flask插件如下:

  • Flask-SQLalchemy:操作数据库;
  • Flask-migrate:管理迁移数据库;
  • Flask-Mail:邮件;
  • Flask-WTF:表单;
  • Flask-script:插入脚本;
  • Flask-Login:认证用户状态;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;

Flask的两个主要核心应用是Werkzeug和模板引擎Jinja,除此以外,别的都是可以自由组装的,适合有洁癖的程序员。

(2) Flask优缺点

优点:

  • 项目结构和配置简单
  • 组件可以自由拆装
  • 小项目或临时性项目比较适用

缺点:

  • 组件高度自定义带来的就是各种组件之间的兼容性问题严重大型应用不适合,例如蓝图(blueprint)机制跟Django的url配置比起来其实差得很远

(2) Flask安装

我们通过pip直接安装

pip install flask 

在任意位置新建一个py文件,hello.py 。

from flask import FlaskFlaskapp = Flask(__name__)@app.route("/")def hello():    return "Hello World!"if __name__ == "__main__":    app.run() 

输入启动命令:

python hello.py* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

最后访问默认地址 http://127.0.0.1:5000 打开flask默认启动页面。

fiM3U3r.jpg!web

3. Tornado

M73myiR.jpg!web

严格意义上来说Tornado不是一个Web框架,而是一个基于Python实现的异步处理框架,只是自带了WSGI处理相关的功能。

tornado和Flask一样,除了基本的Web处理功能和模版之外,其他功能组件都需要自行拼装。

(1) tornado的优缺点

优点:

  • 短小精悍,性能比较好,不依赖Python多进程/多线程
  • 支持异步非阻塞IO处理方式
  • 支持websocket

缺点:

  • 过于精简,只适用于纯接口化服务或者小型网站应用

(2) Tornado安装

同样使用pip进行安装。

pip install tornado 

新建一个hello.py 代码文件。

import tornado.webimport tornado.ioloopclass IndexHandler(tornado.web.RequestHandler):    def get(self):        self.write('hello world')if __name__ == '__main__':    # 创建应用对象    app = tornado.web.Application([(r'/',IndexHandler)])    # 绑定监听端口    app.listen(8888)    # 启动web程序    tornado.ioloop.IOLoop.current().start() 

最后执行 python hello.py启动tornado服务,通过http://127.0.0.1:8888访问初始化页面

6ZrY3yN.jpg!web

以上三种是Python开发中经常使用到的Web框架,还有一些不是那么常用的也一并给大家简单介绍一下。

4. TurboGears

rUV3aqF.jpg!web

据说豆瓣早期就是基于该框架进行开发的。

TurboGears是在几个著名的Python项目上组装搭建起来的一个框架,由SQLAlchemy,WebOb,Repoze,Genshi组成。

在某种意义上,TurboGears是将多个开源组件粘合在一起。和Django同样采用MVC架构。

TurboGears的优点:

  • 支持聚合
  • 强大的对象关系映射器
  • 事务系统支持多数据库间事务
  • 多数据库支持
  • 以可重用的代码片段为模板
  • 具有很多的灵活性,可以对接非标准组件
  • 支持分片
  • 模板系统使设计师的设计更轻松

5. Bottle

A3qeMb7.jpg!web

Bottle和Flask一样,也是一个轻量级的Web开发框架。

它不依赖于Python标准库外的任何库。于2009年被创造出来,它仅由包含模板、路由和一个WSGI抽象层的最小工具开始。对于程序员想寻找一个最轻量级的WSGI服务是一个很好的选择,用它可以最快速度的创建一个Web服务。

Bootle优点:

  • 超轻量级
  • 内建模板引擎和对Jinja2,Mako和Cheetah的支持

总结

今天给大家介绍了各种Python的Web开发框架,我个人常用的框架主要包括Django、Flask、Tornado。别的框架涉猎较少,也是因为流行度和易用性的关系。

针对于最常用的三种框架,我给大家一个使用建议:

  • 正式项目、大型项目,确定需要长期开发和维护的项目建议选择Django,一劳永逸,不用考虑太多。
  • 小型项目、临时性的项目,不怕折腾的,可以选择Flask。
  • 小型项目、临时性项目或者一些简单的接口服务,可以选择Tornado,因为Tornado天生支持异步,所以很多需要做异步IO服务的也可以选择Tornado,另外Django3.0之后也开始全面支持异步了,建议大家观望。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK