web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用;web2p采用Python语言编写,并且可以使用Python编程。web2py是一个完整的堆栈框架,也就是说她包含了开发完整功能的web应用所需的所有组件。

web2py被设计来指导web开发人员遵循良好的软件工程实践,如使用模型(Model),视图(View),控制器(Controller)MVC模式。web2py将数据表达(the model)从数据表示(the view)和应用逻辑及工作流(the controller)中分开。web2py提供的库可以帮助开发者分别设计,实施和测试MVC中的每一部分,并能使它们一起工作。

web2py是为了安全而构建的。这意味着遵循成熟的方法,他能自动处理很多可能导致安全漏洞的问题。例如web2py验证所有输入(防止注入攻击),转义所有输出(防止跨站点脚本攻击),重命名上传文件(防止目录遍历攻击)。在与安全有关的方面,web2py没有留给应用程序开发人员选择的余地。

web2py中包含数据库抽象层(DAL),它能够动态写入SQL[sql:w] ,因此开发人员不需要自己写。DAL知道如何透明地生成支持SQLite[sqlite] ,MySQL[mysql] ,PostgreSQL[postgres] ,MSSQL[mssql] ,FireBird[firebird] , Oracle[oracle] ,IBM DB2[db2] ,Informix[informix] 以及Ingres[ingresdb] 的SQL语句。当在谷歌App Engine (GAE)[gae]上运行时,DAL也能生成函数调用Google Datastore。实验时,我们支持更多的数据库。请查看web2py网站和邮件列表,获取最新的支持。一旦有一个或多个数据库表被定义,web2py也能生成一个全功能的基于web的数据库管理接口来访问数据库和表。

web2py与其它web框架的不同之处在于,它是唯一全面支持web2.0范例的框架,在这里web就是计算机。实际上,web2py不需要安装或配置,它能在任何支持Python的体系结构(Windows,,Windows CE,Mac OS X,iOS ,Unix/Linux)上运行,应用程序的开发、部署和维护可以通过本地或远程web接口完成。web2py支持CPython(C语言实现)或Jython(Java语言实现),虽然官方声称仅支持2.5版本,但实际支持的版本包括2.4,2.5,2.6,2.7,这保证了应用程序的后向兼容性。

web2py提供了一个票据系统。如果出现错误,系统会发出一个票据给用户,并记录错误信息供管理员查看。

下面给出一些web2py语句的例子来展示它的功能和简洁性。代码如下:

db=DAL("mysql://root:Free-Wi11@10.0.20.252:3306/mybatis")
db.define_table('users',Field('id'),Field('name'),Field('age'),primarykey=['id'],migrate=False)

web框架通常分为两种类型:一种是“胶水”框架,通过组合(粘合)几个第三方组件来构造。另一种是“全功能栈”框架,通过创建特别设计的紧密整合和协作工作的组件来构造。

web2py是一个全堆栈框架。几乎所有组件都是从头构建的,并被设计成协同工作,但是这些组件在web2py框架之外同样能发挥功能。例如,数据库抽象层(DAL)或模板语言都能独立于web2py框架使用,只要将gluon.dal或gluon.template导入你的Python应用即可。gluon是包含系统库的web2py模块的名称。一些web2py库依赖web2py的其它部分,例如,建立和处理来自数据库表格的表单。web2py也能够同第三方Python库配合使用,包括其它模板语言和DAL,但它们之间的结合没有原配组件那么紧密。

模型-视图-控制器(Model-View-Controller)

web2py鼓励开发人员将数据表达(Model),数据表达(View)和应用工作流(Controller)分离。

web2py中一个请求的典型工作流描述如下:

在图中:

  • 服务器可以是web2py内置服务器或第三方服务器,例如Apache。服务器可以处理多线程。
  • "main"是主要的WSGI应用。它负责处理所有常见任务和封装用户应用。它处理cookies、sessions、transactions、URL地址解析及反向地址解析和分发。如果web服务器没有处理的话,它能服务和流静态文件。
  • Model、View、Controller组件构成了用户应用。
  • 同一个web2py实例可以承载多个应用。
  • 虚线箭头表示与数据库引擎的通信。数据库查询可以使用SQL语言(不推荐)或使用web2py DAL语言(推荐),这样web2py应用代码不依赖于特定数据库引擎。
  • 分发器将请求的URL映射成控制器中的函数调用。函数的输出可以是字符串或符号字典(哈希表)。字典中的数据将被呈现成视图。如果用户请求HTML页面(默认情况),字典将被呈现成HTML页面。如果用户以XML请求同一页面,web2py将会尝试找到一个能将字典呈现成XML格式的视图。开发人员可以创建视图将页面呈现成任何已经支持的协议(HTML、XML、JSON、RSS、CSV、RTF)或者另外的自定义协议。
  • 所有的调用都被封装到一个事务(transaction)之中,并且任何未捕获到的异常都将导致事务回滚。如果请求成功,事务将被提交。
  • web2py还能自动处理sessions和session cookies,并且当事务被提交的时候,相应的session也被保存,除非有另有指明。
  • 还能注册经常性的任务(通过cron)以定时和/或在特定的任务完成(action)之后执行。用这种方式将可能在后台运行耗时长的、计算量大的任务,而不影响用户浏览。

这里给一个最小的,完整的MVC应用,它由3个文件组成:

“db.py”是模型:

db=DAL("mysql://root:Free-Wi11@10.0.20.252:3306/mybatis")
db.define_table('users',Field('id'),Field('name'),Field('age'),primarykey=['id'],migrate=False)

它连接数据库(在本例中是指存储在10.0.20.252中的mysql数据库)并定义了一个名为users的表,如果该表不存在,web2py将在后台透明的创建它,并生成适用于特定数据库引擎的sql语句。

当表格被定义并创建好之后,web2py还会生成一个功能完整的基于web的数据库管理界面,该界面称作appadmin,通过它访问数据库和表。

”default.py”是控制器:

def users():
grid=SQLFORM.grid(db.users,user_signature=False)
return locals()

在web2py中,URL被映射成Python模块和函数调用。在本例中,控制器仅包含一个名为contracts的函数(或“action”)。Action可能返回字符串(返回的网页)或Python字典(一组对应的键和值)或一组局部变量(如同本例)。如果函数返回字典,它将被传送给视图,该视图与控制器/函数同名,并返回一个网页。在本例中,函数contacts生成一个表db.user的选择(select)/搜索(search)/创建(create)/更新(update)/删除(delete)网格,并将该网格返回给视图

“default/users.html”是视图

{{extend 'layout.html'}}
<h1>users records</h1>
{{=grid}}

界面显示:

数据库中的记录:

文件目录:

为什么选择web2py

web2py是众多web应用框架中的一种,但是它有引人注目的、独特的功能。web2py最初被开发成一种教学工具,最初的开发动机如下:

  • 在不牺牲功能的前提下,方便用户学习服务器端web开发。为此,web2py被设计成无需安装、无需配置,无依赖性(除了源代码的发行版要求Python2.5和它的标准库模块外),绝大部分功能可以通过Web接口访问。
  • web2py从刚推出起一直到今天都保持稳定,因为它遵循自上而下的设计原则,即在它被编写以前所有编程接口(API)都已经被设计好。甚至加入了新功能,它的后向兼容性也不会被破坏。即便将来增加了新功能,也能实现兼容。
  • web2py前瞻性地解决许多重要的安全问题,这些问题困扰着许多现代Web应用,将在下面开放Web软件安全工程[owasp]中介绍。
  • web2py是轻量级的。其核心库,包括数据库抽象层、模板语言和所有帮助对象加在一起只有1.4MB。整个源代码包括示例应用和图像在内,也只有10.4MB。
  • web2py占用资源少,运行速度快。它使用由Timothy Farrell开发的Rocket[rocket] WSGI服务器。它与采用mod_wsgi的Apache一样快。我们的测试表明,在一台普通的PC上,不访问数据库的动态网页平均响应时间大约10ms。DAL开销小,通常小于3%。
  • web2py在模块、控制器和视图中采用Python句法,但并不导入模块和控制器(其余Python框架采用导入方式),而是去执行它们。这意味着不必重启web服务器即可进行应用的安装、卸载和修改,不同的应用可以共存而不会导致模块的互相干扰。
  • web2py使用数据库抽象层取代对象关系映射(ORM)。从概念角度来说,这意味着不同的数据库表被映射成不同的Table类实例,而不是不同的类,同时记录被映射成Row类的实例,而不是相应的Table类的实例。从实用的角度来看,这意味着SQL句法与DAL句法几乎一一对应,DAL在引擎盖下没有复杂的元类(metaclass)编程,这与流行的ORM不同,复杂的编程将增加延迟。

WSGI [wsgi-w,wsgi-o] (Web服务器网关接口)是一种新兴的Web服务器和Python应用之间通信的Python标准。

Pycharm建立web2py项目的更多相关文章

  1. Pycharm建立web2py项目并简单连接MySQL数据库

    引言 web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用:web2p采用Python语言编写,并且可以使用Python编程.web2py是一个完整的堆栈框架, ...

  2. 转-pycharm建立项目

    转自:https://blog.csdn.net/m0_37544464/article/details/79171913 本文针对环境已经配置好的Pycharm建立新项目 1.第一步 2.第二步 在 ...

  3. django学之路01--环境安装和pycharm运行django项目

    1. 环境安装 1).virtualenv安装 C:\Users\Administrator>pip install virtualenv Collecting virtualenv Using ...

  4. PyCharm中创建项目时,在所创建的python虚拟环境下的pip失效

    在这篇博文里,我简单地叙述了我在使用PyCharm创建一个flask项目时遇到的问题,以及我解决这个问题的过程.其中比较值得注意的点有:①PyCharm创建新项目时的解释器配置②Python虚拟环境的 ...

  5. pycharm建立第一个django工程-----windows中

    pycharm建立第一个django工程 系统:win764 ip: 192.168.0.100 安装django pip install django 左上角建立一个名为Firstdjango工程 ...

  6. 使用pycharm创建Django项目,'django-admin' 不是内部或外部命令

    报错信息如下: (笔者的电脑为win10,python3.7,django 2.2.6 ) 第一种情况的解决方案:没有配置环境变量,Django安装之后,需要配置环境变量,命令django-admin ...

  7. python-django项目-Linux系统建立django项目_20191117

    python-django项目-Linux系统建立django项目 1,Linux系统下面,cd /usr/local/lib/  看这个下面会有两个python版本,一个2.7,一个3.5,我们使用 ...

  8. Django基础,Day1 - 环境安装与pycharm创建django项目

    Django是一个高级Python Web框架,支持快速部署,清理和实用的设计.它可以被轻易部署和提供实用的组件,而开发人员只需要专注于写自己的应用程序,而不需要重复造轮子.并且Django是自由和开 ...

  9. MRPT笔记——使用编译好的MRPT库建立VS2013项目

    接着上一篇<MRPT在VS2013中的配置>,下面接收如何使用编译好的MRPT建立工程项目. 一.设置环境变量 上一篇中,配置MRPT时,使用到了几个相关库,opencv.zlib.wxW ...

随机推荐

  1. C++——文件的读写

    C++中标准IO库的fstream头文件定义了三种支持文件IO的类型: ifstream,由istream派生而来,提供读文件的功能. ofstream,由ostream派生而来,提供写文件的功能. ...

  2. HBuilder git使用教程

    1.插件安装 打开HBuilder,工具->插件安装. 等待安装,成功后提示重启后生效,立即重启. 2.在码云上新建一个项目,复制项目地址. 码云地址:https://gitee.com/ 3. ...

  3. mysql 监听ip地址修改

    如何修改MySQL监听IP地址 Mysql默认在本地环路地址127.0.0.1的3306端口监听,要使用其它IP地址需要修改配置文件. 1.编辑/etc/my.cnf 在[mysqld]节中增加下面一 ...

  4. MYSQL的读写分离主从延时问题

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  5. 【转】Windows 7下用VMware Workstation 10虚拟机安装 Ubuntu 14.04

    一.软件下载 1.VMware Workstation v10.0.1虚拟机官方简体中文版下载(附永久KEY注册密钥) http://www.linuxidc.com/Linux/2012-11/73 ...

  6. poj1753 (高斯消元法求异或方程组)

    题目链接:http://poj.org/problem?id=1753 题意:经典开关问题,和poj1222一样,进行两次高斯消元即可,只用初始化的时候改一下初始状态.可能存在无解或多解的情况,多解要 ...

  7. libtool

    [从网上摘录的,忘了从哪摘的了]   libtool常见于autoconf/automake,单独用的例子很少,所以我想仔细研究一下,为将来兄弟们看起来方便. 一.libtool的作用offer a ...

  8. 在springMVC框架中集成quartz作业调度器

    1.首先需要导入这几个jar包,如下图: 其中log4j,quartz,slf4j-api,slf4j-log4j12我是在项目中都引用了 2.引用完jar包后,新建一个作业调度类,执行作业调度逻辑, ...

  9. SpringBoot或者SpringMVC 临时取消配置的视图页面的前后缀

    // 重定向到新的jsp页面return "redirect:/index.jsp"; // 请求转发到新的jsp页面 return "forward:/index.js ...

  10. k-近邻(KNN) 算法预测签到位置

    分类算法-k近邻算法(KNN): 定义: 如果一个样本在特征空间中的k个最相似 (即特征空间中最邻近) 的样本中的大多数属于某一个类别,则该样本也属于这个类别 来源: KNN算法最早是由Cover和H ...