一 web2py的应用的执行环境
Models,Controllers和views所在的执行环境中,以下对象已经被默认地导入:

Global Objects:
  request,response,session,cache

Navigation:
  redirect,HTTP

Internationalization:
  T

Helpers:
  XML, URL, BEAUTIFYA, B, BEAUTIFY, BODY, BR, CENTER, CODE, DIV, EM, EMBED,FIELDSET, FORM, H1, H2, H3, H4, H5, H6, HEAD, HR, HTML,I, IFRAME, IMG, INPUT, LABEL, LEGEND, LI, LINK, OL, UL,MARKMIN, MENU, META, OBJECT, ON, OPTION, P, PRE, SCRIPT,OPTGROUP, SELECT, SPAN, STYLE, TABLE, TAG, TD, TEXTAREA,TH, THEAD, TBODY, TFOOT, TITLE, TR, TT, URL, XHTML, xmlescape, embed64

validators:
  CLEANUP, CRYPT, IS_ALPHANUMERIC, IS_DATE_IN_RANGE, IS_DATE,IS_DATETIME_IN_RANGE, IS_DATETIME, IS_DECIMAL_IN_RANGE,IS_EMAIL, IS_EMPTY_OR, IS_EXPR, IS_FLOAT_IN_RANGE, IS_IMAGE,IS_IN_DB, IS_IN_SET, IS_INT_IN_RANGE, IS_IPV4, IS_LENGTH,IS_LIST_OF, IS_LOWER, IS_MATCH, IS_EQUAL_TO, IS_NOT_EMPTY,IS_NOT_IN_DB, IS_NULL_OR, IS_SLUG, IS_STRONG, IS_TIME,IS_UPLOAD_FILENAME, IS_UPPER, IS_URL

Database: 
  DAL, Field

其他的一些不常用的对象需要用户显示的导入,如Auth,Crud和Service等,如下:from gluon.tools import Auth, Crud, Service.

二 web2py的核心对象

1) request
request对象是web2py中常见的类型gluon.storage.storage的实例,gluon.storage.storage是python的dict的子类。gluon.storage.storage与dict主要的不同就是可以像访问属性一样访问dict的元素。如下request.vars等价于request['vars'],另一个与dict不同的就是当访问的key不存在时,不抛出异常,而是返回None。request有下列的属性,其中有些属性也为gluon.storage.storage类型:

* request.cookies: cookie.simplecookie()对象,包含了HTTP request中的cookies信息。它像一个cookies dictionary。
* request.env:是一个storage对象,包含了传递给controller的环境变量,包括来自HTTP request的HTTP header和标准的WSGI参数。环境变量都被转化为小写,点被转化为下划线。
* request.application:请求的应用的名字(从request.env.path_info解析而来)。
* request.controller:请求的controller的名字(从request.env.path_info解析而来)。
* request.function:请求的函数的名字(从request.env.path_info解析而来)。
* request.extension:extension默认为html,如果controller函数返回一个dictionary且没有指定view,extension将被用来决定使用何种view来渲染dictionary。(从request.env.path_info解析而来)。
* request.folder:应用程序的目录。
* request.now:存储了当前request的时间戳,类型为datetime.datetime。
* request.args:controller函数后面的URL路径组件的list,等价于request.env.path_info('/')[3:]。
* request.vars:storage对象包含了HTTP GET和HTTP POST的查询变量。
* request.get_vars: storage对象存储了HTTP GET查询变量。
* request.post_vars:storage对象存储了HTTP POST查询变量。
* request.client:client的ip地址。
* request.body:  只读的文件流包含了HTTP request的body。
* request.ajax:是True,如果函数通过Ajax request被调用。
* request.cid:ajax request产生的组件的id。
* request.wsgi:一个钩子允许调用在actions里第三方的WSGI应用。

对于请求http://127.0.0.1:8000/examples/default/status/x/y/z?p=1&q=2,request对象如下:

variable            value 
request.application examples 
request.controller  default 
request.function    index 
request.extension   html 
request.view        status 
request.folder      applications/examples/ 
request.args        ['x', 'y', 'z'] 
request.vars        <Storage {'p': 1, 'q': 2}> 
request.get_vars    <Storage {'p': 1, 'q': 2}> 
request.post_vars   <Storage {}> 
request.cid         None 
request.wsgi        hook 
request.env.content_length          0 
request.env.content_type  
request.env.http_accept             text/xml,text/html; 
request.env.http_accept_encoding    gzip, deflate 
request.env.http_accept_language    en 
request.env.http_cookie             session_id_examples=127.0.0.1.119725 
request.env.http_host               127.0.0.1:8000 
request.env.http_max_forwards       10 
request.env.http_referer            http://web2py.com/ 
request.env.http_user_agent         Mozilla/5.0 
request.env.http_via                1.1 web2py.com 
request.env.http_x_forwarded_for    76.224.34.5 
request.env.http_x_forwarded_host   web2py.com 
request.env.http_x_forwarded_server 127.0.0.1 
request.env.path_info               /examples/simple_examples/status 
request.env.query_string            remote_addr:127.0.0.1 
request.env.request_method          GET 
request.env.script_name  
request.env.server_name             127.0.0.1 
request.env.server_port             8000 
request.env.server_protocol         HTTP/1.1 
request.env.web2py_path             /Users/mdipierro/web2py 
request.env.we2bpy_version          Version 1.83.1 
request.env.web2py_runtime_gae      (optional, defined only if GAE detected) 
request.env.wsgi_errors             <open file, mode 'w' at > 
request.env.wsgi_input  
request.env.wsgi_multiprocess       False 
request.env.wsgi_multithread        True 
request.env.wsgi_run_once           False 
request.env.wsgi_url_scheme         http 
request.env.wsgi_version            10

request.env.http_* 变量是从request HTTP header中解析而来.

2) response

response 是另一个storage实例,它包含了下列的属性:

response.body: 包含了返回的page的body的stringio对象。
response.cookies:与request.cookies(包含了client到server的cookies)类似,但是包含了server返回给client的cookies。
response.download:一个方法用来实现controller函数允许文件的下载。
response.files:页面需要的css和js文件的列表。这些文件将被自动地连接到标准的layout.html头。当需要包含新的css和js文件,只需要将他们加入到这个list。必须注意的是文件的顺序。
response.flash:可选的参数,可以包含在views。通常用来告知用户一些变化。
response.headers:HTTP response的头得dict。
response.menu:可选的参数,可以包含在views。一般用来将导航菜单传递给views。它可以使用MENU helper来产生。
response.meta:storage对象包含了可选的meta storage信息,例如response.meta.author,response.meta.description和response.meta.keywords。meta变量的内容被web2py_ajax.html(被views/layout.html包含)自动地放置到对应的tag中。
response.postprocessing:这是一个函数list,默认为空。这些函数用来在输出被渲染前过滤一个action的输出的response对象。
response.render(view,vars):一个方法被用来显示地在controller中调用view。view是可选参数是view文件的名字。vars是一个传给view的dict。
response.seesion_file:文件流包含了session。
response.session_file_name:包含了session被保存的文件名字。
response.session_id:当前session的id。
response.session_id_name:这个应用的session cookie的名字。
response.status:HTTP状态代码。默认为200.
response.stream:当一个controller返回它,web2py流花文件内容给client。
response.subtitle:包含在views中的可选的参数。应该包含页面的subtitle。
response.title:包含在views中的可选的参数。
response_vars:只能被view访问的一个变量。action不能访问。它包含了action返回给view的值。
response.view:用来渲染页面的view模板的名字。默认为"%s/%s.%s" % (request.controller, request.function, request.extension)。如果以上view模板不存在,则使用"generic.%s" % (request.extension) 。改变该值来修改特定的action的view文件。
response.xmlrpc:当一个controller返回它,这个函数通过xml-rpc暴露该方法。
response.js:可以包含javascript代码。

3)session

session是另一个storage类型的实例。只要code被同一个用户执行在同一session(用户没有删除session cookies且session没有过期), 就可以使用session.myvar = ‘hello’存储变量,使用a=session.myvar来使用变量。

session有2个重要的方法:
session.forget(response),此方法告诉web2py不保存session。
session.connect(request,response,db,masterapp=None),db是一个打开的数据库连接。此方法告诉web2py存储session到数据库而不是文件系统。web2py将创建表:
db.define_table('web2py_session', 
                Field('locked', 'boolean', default=False),                                  Field('client_ip'),
                Field('created_datetime', 'datetime', default=now),                         Field('modified_datetime', 'datetime'),                                 Field('unique_key'),                 Field('session_data', 'text')) 
且存储cpickled sessions在session_data字段。

4)cookies
web2py使用python的cookies模块来处理cookies。从浏览器传来的cookies存储在request.cookies。从server传给client的包含在response.cookies。可以使用下列的方法来设置cookies:
response.cookies['mycookie'] = 'somevalue'
response.cookies['mycookie']['expires'] = 24 * 3600
response.cookies['mycookie']['path'] = '/'

使用cookies的方法如下:
if request.cookies.has_key('mycookie'):    value = request.cookies['mycookie'].value

5)cache

cache是web2py执行环境中的一个全局变量。cache有2个属性:
cache.ram:应用程序缓冲在内存中;
cache.disk:应用程序缓冲在硬盘中;

将controller函数的输出缓冲到内存中的例子:
@cache(request.env.path_info, time_expire=5, cache_model=cache.ram)
def cache_controller_in_ram():    
import time    
t = time.ctime()    
return dict(time=t, link=A('click me', _href=request.url))

将controller的函数的输出缓冲到硬盘的例子:
@cache(request.env.path_info, time_expire=5, cache_model=cache.disk)
def cache_controller_on_disk():   
 import time    
t = time.ctime()   
 return dict(time=t, link=A('click to reload',  _href=request.url)) 
 
6)URL
URL用来产生URL的路径。例如URL('a', 'c', 'f', args=['x', 'y'], vars=dict(z='t')) 映射为/a/c/f/x/y?z=t。

7)HTTP和redirect
HTTP其实是一个异常类,如400异常raise HTTP(400, "my message") 
redirect('http://www.web2py.com') 用来转向http://www.web2py.com/

python类库26[web2py之基本概念]的更多相关文章

  1. python类库26[sqlite]

    一 sqlite 与 python 的类型对应 二 实例 import sqlite3 def sqlite_basic():     # Connect to db     conn = sqlit ...

  2. python中基于descriptor的一些概念

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  3. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  4. python中基于descriptor的一些概念(上)

    @python中基于descriptor的一些概念(上) python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2 ...

  5. python中基于descriptor的一些概念(下)

    @python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3 ...

  6. python类库32[多进程同步Lock+Semaphore+Event]

    python类库32[多进程同步Lock+Semaphore+Event]   同步的方法基本与多线程相同. 1) Lock 当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突. imp ...

  7. PyCharm无法找到已安装的Python类库的解决方法

    一.问题描述 软件系统:Windows10.JetBrains PyCharm Edu 2018.1.1 x64 在命令行cmd中安装python类库包Numpy.Matplotlib.Pandas. ...

  8. python基础(八)面向对象的基本概念

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对 ...

  9. python中的Iterable, Iterator,生成器概念

    https://nychent.github.io/articles/2016-05/about-generator.cn 这个深刻 谈起Generator, 与之相关的的概念有 - {list, s ...

随机推荐

  1. [ES6] 21. ESNext, ES6-Shim & Node

    ES-Next: Esnextis similar to traceur, you can use command line to compile files. Install: npm instal ...

  2. IIS7及以上伪静态报错404

    内容摘要:故障现象:DTCMS开启伪静态功能,VS2010预览正常,发布到IIS后报错404.0错误(WIN7,WIN8,SERVER2008).模块IISWebCore通知MapRequestHan ...

  3. Labview 中的类

    一.创建一个空的类 在 LabVIEW 工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类.类的结构和 LabVIEW 工程库是比较相近的:类的名字也作为名字空间:也可以为类中的 VI 设置访问权限等 ...

  4. Android(java)学习笔记159:Dalivk虚拟机的初始化过程

    1.初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数) 开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作: dvmAllocTra ...

  5. 100 high quality blogs from java developers

    This list collects 100 high quality blogs from Java developers from all over the world. Some of thes ...

  6. 移动终端学习一:css3 Media Queries简介

    移动终端学习之一 css3 Media Queries简介 1.简介 别人写过的我就不重复了,来个链接:http://www.w3cplus.com/content/css3-media-querie ...

  7. WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档

    客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...

  8. youku的js脚本的工具函数和初始化方法

    定义日志输出函数 (function(){ if(window['console']){ return; } window['console'] = { log: function(){} ,clea ...

  9. JAVA的instanceOf什么时候用啊

    当你拿到一个对象的引用时(例如参数),你可能需要判断这个引用真正指向的类.所以你需要从该类继承树的最底层开始, 使用instanceof操作符判断,第一个结果为true的类即为引用真正指向的类. cl ...

  10. jBPM开发入门指南

    http://blog.csdn.net/eric474470/article/details/7665265 工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准.但其应用却已经在快速展开, ...