一 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. winform窗体跟随窗体

           Form2 frm2 = new Form2();         private void MoveProc()         {             frm2.StartPos ...

  2. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  3. 嵌入式Linux-linux连接脚本

    嵌入式Linux-linux连接脚本 介绍 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出 ...

  4. 解锁Dagger2使用姿势(一)

    毫无疑问,Dagger2的 上手是有门槛的,有门槛是因为它里边的概念多,用起来复杂,可是一旦你学会了Dagger2的使用,你一定会爱不释手的.与ButterKnife和AndroidAnnotatio ...

  5. ydoc 参考系列

    多个iframe支持 [http://ionicframework.com/docs/components/#icon-buttons]

  6. iOS 并行编程:Thread

    1 创建线程 1.1 NSThread       使用 NSThread 来创建线程有两个可以使用的方法: 1) 使用 detachNewThreadSelector:toTarget:withOb ...

  7. mono & apache install

    1.red hat 6安装完后网卡是默认不启动的 作为双生兄弟的CENTOS同样如是 第一步 设置网卡开机启动 进入 路径此目录下修改网卡配置文件 如果网卡驱动正常 会有如下文件 只要修改 ifcfg ...

  8. MySQL(5.6) 函数

    字符串函数 ASCII(str) 说明:返回字符串 str 最左边字符的 ASCII 值 mysql'); mysql); mysql> SELECT ASCII('a'); mysql> ...

  9. [转]jQuery选择器总结

    该文章转载自:http://www.cnblogs.com/onlys/articles/jQuery.html jQuery的选择器那绝对最强大的,各种你想不到,原先想总结一下,没想到搜索到这个比我 ...

  10. 关于ASPOSE.WORD使用上的一个小问题

    最近实习期间负责了公司某个项目的一个功能模块里面的word导出功能,使用的是ASPOSE.WORD类库,但是经常导出时候会遇到图中的问题,大概意思就是两个表格不能跨在一起,调试了好几次还是没发现具体的 ...