Python常见web框架汇总
目前,有非常多的Python框架,用来帮助你更轻松的创建web应用。这些框架把相应的模块组织起来,使得构建应用的时候可以更快捷,也不用去关注一些细节(例如socket和协议),所以需要的都在框架里了。接下来我们会介绍不同的选项。
Python发源于八十年代后期。开发者是Centrum Wiskunde & Informatica的Guido van Rossum,这是位于荷兰阿姆斯特丹科学园区的一个数学和计算机科学研究中心。之后Van Rossum一直是Python开发很有影响的人物。事实上,社区成员给了他一个荣誉称号:终生仁慈独裁者(BDFL)。
经过初期的不起眼,Python已经成为互联网最流行的服务端编程语言之一。根据W3Techs的统计,它被用于很多的大流量的站点,超过了ColdFusion, PHP, 和http://ASP.NET。其中超过98%的站点运行的是Python 2.0,只有1%多一点的站点运行3.0。
框架让开发更轻松
今天,有着大量的Python框架,它们可以让web应用的开发更轻松。这些框架把不同的模块集成在一起,让你更快的构架程序,而不用关注一些细节(例如socket和协议),框架提供了需要的所有功能。
作为分成两部分的系列文章的第一部分,我们会介绍一些最流行的Python框架。虽然大部分现代的web框架都运行在服务端,也有一些框架开始尝试与客户端代码结合,可以在客户端运行(例如Skulpt和Trinket)。Python框架通常分为全栈框架和非全栈框架。全栈框架设计从用户体验到数据库的所有技术,非全栈框架则并不包含整个开发的全部技术。
此外还有一种微框架,也属于非全栈框架,但是更轻量级。有的情况下,微框架是比较适合的,有时又适合使用全栈框架。在文章的第二部分我们会对全栈框架和微框架做一个比较。
Django
Django恐怕是最有代表性的Python框架了。它是一个遵循MMVC架构模式的开源框架。它的名字来自Django Reinhardt,一个法国作曲家和吉他演奏家,很多人认为他是历史上最伟大的吉他演奏家。位于堪萨斯洲的Lawrence城的Lawrence Journal-World报社有两位程序员,Adrian Holovaty和Simon Willison,他们在2003的时候开发出了Django,用于给报纸开发web程序。
Django内置了模板引擎,同时也通过OOTB来支持流行的Jinja2引擎。它还支持基于正则的URL分发,可以通过简单的URL来完成复杂的映射。
Django的优势之一是只需要单独的安装包来安装。其他的一些类似的框架需要下载很多组件才能开始工作。而且,Django还有完善的保持更新的文档,对于开源项目来说这通常是短板。它是一个健壮的框架,很好的集成了很多来自社区的插件和扩展。项目背后的社区看上去也组织的很好,这从它非常完善的文档和教程就可以看出来。
我学习的第一个框架就是django,方便入门,上手也比较快。个人觉得django的model不好用,主要是跨库联表不友好。
创建一个项目:
$ pip install django
$ django-admin startproject djdemo cd djdemo
$ django-admin startapp djapp
$ tree -L 3
.
├── djapp
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── djdemo
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ └── settings.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
下面我给出我一个项目的Django的目录结构。是django的经典目录结构形式:
django很简单,Django生态很完备,基于django开发,一般需要的功能,都可以找到已经有的轮子。开发效率很高。django下的开发就是往框架中的填代码。另外就是不够灵活,太重。
django很多好用的脚手架
[django]checkcompilemessagescreatecachetabledbshelldiffsettingsdumpdataflushinspectdbloaddatamakemessagesmakemigrationsmigraterunserversendtestemailshellshowmigrationssqlflushsqlmigratesqlsequenceresetsquashmigrationsstartappstartprojecttesttestserver
TurboGears
TurboGears是在几个著名的Python项目上构建起来的一个框架,如SQLAlchemy,WebOb,Repoze,Genshi。在某种意义上,TurboGears是将多个已经建立的开放平台粘合在一起。和Django一样,它采用MVC架构。它最近还包含一个“最小模式”,使其可以作为一个微框架。
TurboGears是由Kevin Dangoor在2005年开发的。他在当年9月将其作为一个开源项目发布。2013年,项目开发人员迁移到支持Python 3,抛弃了他们曾经写的Pylons代码。TurboGears的优点包括:
- 支持聚合
- 强大的对象关系映射器
- 事务系统支持多数据库间事务
- 多数据库支持
- 以可重用的代码片段为模板
- 具有很多的灵活性,可以对接非标准组件
- 支持分片
- 模板系统使设计师的设计更轻松
TurboGears
安装
$ pip install tg.devtools$ gearbox --help
usage: gearbox [--version] [-v | -q] [--log-file LOG_FILE] [-h] [--debug][--relative]TurboGears2 Gearbox toolsetoptional arguments:--version show program's version number and exit-v, --verbose Increase verbosity of output. Can be repeated.-q, --quiet Suppress output except warnings and errors.--log-file LOG_FILE Specify a file to log output. Disabled by default.-h, --help Show this help message and exit.--debug Show tracebacks on errors.--relative Load plugins and applications also from current path.Commands:help print detailed help for another commandmakepackage Creates a basic python packagepatch Patches files by replacing, appending or deleting text.quickstart Creates a new TurboGears2 projectscaffold Creates a new file from a scaffold templateserve Serves a web application that uses a PasteDeploy configuration filesetup-app Setup an application, given a config filetgext Creates a tgext.* package
创建项目
$ gearbox quickstart tgdemo
// 会生成很多文件.
├── MANIFEST.in
├── README.txt
├── __pycache__
│ └── setup.cpython-37.pyc
├── development.ini
├── migration
│ ├── env.py
│ ├── script.py.mako
│ └── versions
│ └── empty.txt
├── setup.cfg
├── setup.py
├── test.ini
├── tgdemo
│ ├── __init__.py
│ ├── config
│ │ ├── __init__.py
│ │ ├── app_cfg.py
│ │ ├── environment.py
│ │ └── middleware.py
│ ├── controllers
│ │ ├── __init__.py
│ │ ├── controller.py.template
│ │ ├── error.py
│ │ ├── root.py
│ │ └── secure.py
│ ├── i18n
│ │ └── ru
│ ├── lib
│ │ ├── __init__.py
│ │ ├── app_globals.py
│ │ ├── base.py
│ │ └── helpers.py
│ ├── model
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ └── model.py.template
│ ├── public
│ │ ├── css
│ │ ├── favicon.ico
│ │ ├── fonts
│ │ ├── img
│ │ └── javascript
│ ├── templates
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── about.xhtml
│ │ ├── data.xhtml
│ │ ├── environ.xhtml
│ │ ├── error.xhtml
│ │ ├── index.xhtml
│ │ ├── login.xhtml
│ │ ├── master.xhtml
│ │ └── template.xhtml.template
│ ├── tests
│ │ ├── __init__.py
│ │ ├── functional
│ │ └── models
│ └── websetup
│ ├── __init__.py
│ ├── bootstrap.py
│ └── schema.py
└── tgdemo.egg-info├── PKG-INFO├── SOURCES.txt├── dependency_links.txt├── entry_points.txt├── not-zip-safe├── requires.txt└── top_level.txt22 directories, 48 files
上面 是按python包的方式生成的代码形式,方便打包分发。
用户只需要修改下面目录中的代码即可
TurboGears使用示例
from wsgiref.simple_server import make_serverfrom tg import expose, TGController, AppConfigclass RootController(TGController):@expose()def index(self):return "<h1>Hello World</h1>"config = AppConfig(minimal=True, root_controller=RootController())print "Serving on port 8080..."httpd = make_server('', 8080, config.make_wsgi_app())httpd.serve_forever()
web2py
web2py是一个开源框架,允许开发者快速创建动态交互式的网站。它的设计目标是消除拖慢开发的大量重复编程任务,比如创建基本的表格。它在最初是作为工具开发的。随后被Django和Ruby on Rails模仿,Ruby on Rails是个Ruby的框架。同TurboGears一样,它使用MVC架构。
最开始的源代码是由Massimo DiPierro在2007年开放的。在那时,它被称为Enterprise Web Framework(EWF)。由于命名冲突,它改过好几次名字,最后在1.16版确定为当前的web2py。使用web2py开发的应用包括Movuca内容管理系统,音乐网站NoobMusic,名为LinkFindr的网络诊断工具,以及Instant Press博客平台。在2011年,web2py被评为最好的开源开发软件,荣获Bossie Award。第二年,又斩获InfoWorld的年度技术奖。
与Django一样,web2py也具有广泛的文档。新开发者和高级开发者可以免费下载它的完整开发手册。
web2py的一些优点包括:
- 容易使用——作为一个鲁棒的全栈式框架,它无需其他依赖就可以工作,容易学习和部署,安装也无需任何配置文件,一旦下载完成,安装完毕,就可以用了。开发者会获得一个数据库,一个基于web的IDE,web服务器以及一个有多个核心对象组成的强大API。
- 安全性出色——Web2py的模板语言减少了黑客使用跨站脚本的危险,抽象层在创建表单时有表单域有效性检查,避免SQL注入,也阻止了跨站请求伪造攻击(csrf攻击)。会话被存储在服务器上,阻止坏的执行者把浏览器cookie弄乱,并且每个密码都是哈希后存储的。
web2py的一些缺点包括:
- 在常规基础上使用管理的接口不太容易
- 管理的接口没有权限
- 没有内建的单元测试支持
- 开发速度迅速,所有的函数都有缺省行为,表单时自动生成的,高层次的小部件和应用网格都是内建的
目录结构
project/READMELICENSEVERSION > this web2py versionweb2py.py > the startup scriptanyserver.py > to run with third party servers... > other handlers and example filesgluon/ > the core librariespackages/ > web2py submodulesdal/contrib/ > third party librariestests/ > unittestsapplications/ > are the appsadmin/ > web based IDE...examples/ > examples, docs, links...welcome/ > the scaffolding app (they all copy it)ABOUTLICENSEmodels/views/controllers/sessions/errors/cache/static/uploads/modules/cron/tests/... > your own appsexamples/ > example config files, mv .. and customizeextras/ > other files which are required for building web2pyscripts/ > utility and installation scriptshandlers/wsgihandler.py > handler to connect to WSGI... > handlers for Fast-CGI, SCGI, Gevent, etcsite-packages/ > additional optional moduleslogs/ > log files will go in theredeposit/ > a place where web2py stores apps temporarily
Flask
Flask是一个基于Jinja2和Werkzeug的python微框架,和其他框架类似,它是BSD授权的,一个有少量限制的免费软件许可。使用Flask的网站包括领英LinkedIN和Pinterest。Flask有以下特点:
- 内建的单元测试支持
- 模板使用Jinjia2
- 大量文档
- 客户端会话使用安全cookies
- 开发服务器和调试器
- Restful请求
- 与WSGI 1.0兼容
- 基于unicode
- 大量的扩展
Flask是一个年轻的框架,2010年诞生,Flask的目标是不给程序员强加限制,允许你使用自己的数据库对象关系映射,模板引擎,会话中间件以及你的项目所需的其他组件,在我看来这就是这个微框架的用意。
我想说像Flask这样的框架更适合有经验的开发者,并不是小规模应用程序所必须的,当然,如果你只想做一个简单的REST API,那么Flask当然再好不过了。
flask我个人使用的也是比较多的。flask是微框架,比较灵活,适合小型项目。
示例代码
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return 'Hello, World!'
和flask一样,Bottle是一个服务器网关接口(WSGI)网络框架。作为一个文件,它不依赖于Python标准库外的任何库。Marcel Hellkamp于2009年写它的时候,它仅由包含模板、路由和一个WSGI抽象层的最小工具开始。对于程序员寻找灵活性和基本功能、构建简单的应用程序和网站、创建一个Web API来说,这小并且强大的框架是极好的。
它的优点包括:
- 内建的快速模板引擎和对Jinja2,Mako和Cheetah的支持
- 可以访问上传,cookies,表单数据,标题,和其他元数据的大量工具
- 支持fapws3,Google App Engine,CherryPyPaste的内建HTTP开发服务器
- 支持动态URLs
Bottle的另一个优点是,它的小巧精干便于嵌入在一个较大应用程序中而不必担心系统依赖关系。如果你想用一个简单的,干净的和快速的框架并且它没有过多冗余,来创建小的应用程序,Bottle是适合你的。
示例代码:
from bottle import route, run, template@route('/hello/<name>')
def index(name):return template('<b>Hello {{name}}</b>!', name=name)run(host='localhost', port=8080)
多框架
虽然很难相信,但这些只是少数几十个开发人员可以使用Python框架,。报道,Django,TurboGears和web2py是最受欢迎的完整选项。为了在框架优化方面提供一个全面的观察,这里我们添加了两个高级形态的微型框架。有着热情的追随者其他框架包括 Pyramid, web.py, Bobo, Albatross, 和 CherryPy。
找到正确的适合选择
正确框架的选择取决于项目的规模,它的通信需求,它是否是一个独立的应用程序,定制需求的级别,开销,和许多其他因素。同样重要的是,它取决于哪个框架适合你个人的工作方式。回顾这些项目并下载他们最新的版本。在计划一个主要旅行之前,试开一下确保你在一个合适的车辆中。
Python常见web框架汇总相关推荐
- API接口开发其实特简单,Python Flask Web 框架教程来了
大家好,日常工作中,无论你是数据工程师.数据挖掘工程师,甚至数据分析人员,都不可避免的与他人进行数据交互,API接口提供数据是最常见的形式. 今天我给大家分享 Python Flask Web 框架教 ...
- python bottle web框架简介
Bottle 是一个快速,简单,轻量级的 Python WSGI Web 框架.单一文件,只依赖 Python 标准库 .bottle很适合会一点python基础的人使用,因为这框架用起来很简单,只要 ...
- python搭建django框架,Python之Web框架Django项目搭建全过程
Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行. 是的,所以读者需要自己在 ...
- python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx'
python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' ...
- 几种常见的python的Web框架比较
1.Django Django是最著名的Python框架.特点是大而全.Django采用了MVC的软件设计模式,即模型M,视图V和控制器C.Django本身是一个高级别的PythonWeb框架,它鼓励 ...
- python 后端web框架知识整理
1.Django 创建项目的命令? django-admin startproject 项目名称 python manage.py startapp 应用 app 名 2.Django 创建项目后,项 ...
- Python微型Web框架Bottle源码分析
Bottle 是一个快速,简单和轻量级的 WSGI 微型 Web 框架的 Python.它作为单个文件模块分发,除了 Python 标准库之外没有依赖关系. 选择源码分析的版本是 Release 于 ...
- python微型web框架flask介绍
Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持包比如Jin ...
最新文章
- Battle for Wesnoth 1.8.4,开源战斗游戏
- getParameter的用法总结
- 《软件建模技术》课程教学大纲
- Javaassist简介
- vue-day03-vue组件化开发
- Java == 与 equals 的不同
- PyTorch 1.9发布!移动端疯狂更新
- 一加手机安装鸿蒙系统,【新机】华为MatePad Pro 2官宣,刘作虎点赞鸿蒙手机
- linux系统分类;linux find命令
- openresty 前端开发入门一 1
- 2017-2018 20155309 南皓芯 信息安全基础设计第八周博客
- mysql查出同义词_在数据库mysql中存储和检索同义词的最佳方法
- 计算机指法标准,标准盲打指法练习
- 机器学习之从基础数学深入剖析逻辑回归(案例理论相结合)
- 红孩儿编辑器的模块设计3
- OSPO Summit 2022 正式启动!OSPO Summit 2022 Launched!
- 云游戏深度报告:中国云游戏商业模式在哪里?
- Java中double类型保留两位小数
- 计算机工业控制高职教材,计算机工业控制技术
- 记go语言椭圆曲线算法公私钥验证补充
热门文章
- 广告投放策略及数据分析
- CSS背景图片background如何改变大小以及样式设置
- 条件极值例题_条件极值问题、拉格朗日乘数法
- ictclas4j java_Paoding, Ik, Jeasy, Ictclas4j分词工具
- 台式电脑开机显示蓝屏 检查计算机上的病毒,电脑出现蓝屏是怎么回事
- 测试中的Right-BICEP
- vs2017下配置Xamarin
- 用Java编程开发“六级单词强化记忆”游戏
- Gameplay Ability System - UE4
- 原创西门子SMART 200 modbus rtu通讯宇电温控器例程