摘要:
欢迎来到web.py 0.3的Cookbook。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。格式在编排内容时,请尽量使用cookbook格式…如:###问题:如何访问数据库中的数据?###解法:使用如下代码…请注意,网址中不必含有”web”。如”/cookbook/select”,而非”/cookbook/web.select”。该手册适用于0.3版本,所以您在添加代码时,请确认代码能在新版本中工作。基本应用:Hello World提供静态文件访问理解URL控制跳转与重定向使用子应用提供XML访问从post读取原始数据高级应用用web.ctx获得客户端信息应用处理器,添加 阅读全文
随笔档案-2012年11月
Web.py Cookbook 简体中文版 - 如何使用web.background
2012-11-26 10:10 by justjavac, 233 阅读, 收藏, 编辑
摘要:
注意!!web.backgrounder已转移到web.py 3.X实验版本中,不再是发行版中的一部分。你可以在这里下载,要把它与application.py放置在同一目录下才能正运行。介绍web.background和web.backgrounder都是python装饰器,它可以让某个函式在一个单独的background线程中运行,而主线程继续处理当前的HTTP请求,并在稍后报告background线程的状态(事实上,后台函式的标准输出(stdout)被返回给启动该线程的”backrounder”)。 译注:我本来想将background thread翻译为后台线程,后来认为作者本意是想表达 阅读全文
Web.py Cookbook 简体中文版 - Application processors
2012-11-26 10:10 by justjavac, 144 阅读, 收藏, 编辑
摘要:
问题如何使用应用处理器,加载钩子(loadhooks)和卸载钩子(unloadhook)?解法web.py可以在处理请求之前或之后,通过添加处理器(processor)来完成某些操作。def my_processor(handler): print 'before handling' result = handler() print 'after handling' return resultapp.add_processor(my_processor)可以用加载钩子(loadhook)和卸载钩子(unloadhook)的方式来完成同样的操作,它们分别在请求开始 阅读全文
Web.py Cookbook 简体中文版 - 交替风格
2012-11-26 10:10 by justjavac, 212 阅读, 收藏, 编辑
摘要:
问题:你想通过数据集合动态的生成交替背景色的列表.方法:Give templetor access to theintbuilt-in and use modulo to test.code.pyweb.template.Template.globals['int'] = inttemplate.html<ul>$var i: 0$for track in tracks: $var i: ${int(self.i) + 1} <li class=" $if int(self.i) % 2: odd $else: even ">$tra 阅读全文
Web.py Cookbook 简体中文版 - 如何操作Cookie
2012-11-26 10:09 by justjavac, 169 阅读, 收藏, 编辑
摘要:
问题如何设置和获取用户的Cookie?解法对web.py而言,设置/获取Cookie非常方便。设置Cookies概述setcookie(name, value, expires="", domain=None, secure=False): name(string)- Cookie的名称,由浏览器保存并发送至服务器。value(string)-Cookie的值,与Cookie的名称相对应。expires(int)- Cookie的过期时间,这是个可选参数,它决定cookie有效时间是多久。以秒为单位。它必须是一个整数,而绝不能是字符串。domain(string)- Coo 阅读全文
Web.py Cookbook 简体中文版 - CGI deployment on Apache
2012-11-26 10:09 by justjavac, 215 阅读, 收藏, 编辑
摘要:
Here are the simple steps needed to create and run an web.py application.Install web.py and flupsCreate the application as documented if __name__ == "__main__": web.run(urls, globals())For our example, let it be namedapp.py, located in/www/appand we need it accessible ashttp://server/app/a 阅读全文
Web.py Cookbook 简体中文版 - db.delete 数据删除
2012-11-26 10:08 by justjavac, 159 阅读, 收藏, 编辑
摘要:
问题在数据库中删除数据。解决办法import webdb = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')db.delete('mytable', where="id=10")上面接受 “using” 和 “vars” 参数。删除方法返回被删除的影响行数。 阅读全文
Web.py Cookbook 简体中文版 - 自定义NotFound消息
2012-11-26 10:08 by justjavac, 128 阅读, 收藏, 编辑
摘要:
问题如何定义NotFound消息和其他消息?解法import weburls = (...)app = web.application(urls, globals())def notfound(): return web.notfound("Sorry, the page you were looking for was not found.") # You can use template result like below, either is ok: #return web.notfound(render.notfound()) #return web.notf... 阅读全文
Web.py Cookbook 简体中文版 - web.ctx
2012-11-26 10:08 by justjavac, 217 阅读, 收藏, 编辑
摘要:
问题如何在代码中得到客户端信息?比如:来源页面(referring page)或是客户端浏览器类型解法使用web.ctx即可。首先讲一点架构的东西:web.ctx基于threadeddict类,又被叫做ThreadDict。这个类创建了一个类似字典(dictionary-like)的对象,对象中的值都是与线程id相对应的。这样做很妙,因为很多用户同时访问系统时,这个字典对象能做到仅为某一特定的HTTP请求提供数据(因为没有数据共享,所以对象是线程安全的)web.ctx保存每个HTTP请求的特定信息,比如客户端环境变量。假设,我们想知道正在访问某页面的用户是从哪个网页跳转而来的:例子class 阅读全文
Web.py Cookbook 简体中文版 - 通过Fastcgi和lighttpd部署
2012-11-26 10:07 by justjavac, 230 阅读, 收藏, 编辑
摘要:
如果你对这个主题有任何问题,可以点击下面的链接访问相应的话题:http://www.mail-archive.com/webpy@googlegroups.com/msg02800.html下面的代码基于lighttpd 1.4.18,更高版本也可以工作Note:你可以重命名code.py为任何你自己愿意的名字,该例子还是以code.py为例。如果你还不确定你的lighttpd版本的话,你可以在命令行中使用<code>lighttpd -v</vode>查看相应的版本信息。Note: 较早版本的lighttpd可能会按照不同的方式组织.conf文件,但是它们应该遵循的是 阅读全文
Web.py Cookbook 简体中文版 - Web.py using FastCGI and Apache 2
2012-11-26 10:07 by justjavac, 195 阅读, 收藏, 编辑
摘要:
RequirementsApache 2.xmod_fcgidmod_rewriteFlupNote, on CentOS compiling mod_fcgid requires apache-devel be installed (available via yum).Apache ConfigurationReplace ‘/var/www/myapp/’ with the path to your apps directoryLoadModule rewrite_module modules/mod_rewrite.soLoadModule fcgid_module modules/m 阅读全文
Web.py Cookbook 简体中文版 - Webpy + Nginx with FastCGI搭建Web.py
2012-11-23 11:16 by justjavac, 194 阅读, 收藏, 编辑
摘要:
这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用环境依赖的软件包Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。Webpy 0.32Spawn-fcgi 1.6.2Flup注意:Flup是最常见的忘记装的软件,需要安装更老的版本应该也可以工作,但是没有测试过,最新的是可以工作的一些资源Nginx wikiSpawn-fcgiFlupNotes你可以重命名index.py为任何你想要的文件名。/path/to/www为代码路径。/path/to/www/index.py为python代码的完整路径。Nginx 配置文件location 阅读全文
Web.py Cookbook 简体中文版 - 怎样使用表单 forms
2012-11-23 11:15 by justjavac, 275 阅读, 收藏, 编辑
摘要:
问题:怎样使用表单 forms解决:‘web.form’模块提供支持创建,校验和显示表单。该模块包含一个’Form’类和各种输入框类如’Textbox’,’Password’等等。当’form.validates()’调用时,可以针对每个输入检测的哪个是有效的,并取得校验理由列表。‘Form’类同样可以使用完整输入附加的关键字参数’validators’来校验表单。这里是一个新用户注册的表单的示例:import webfrom web import formrender = web.template.render('templates') # your templatesvpa 阅读全文
webpy-cookbook-form-ields.html
2012-11-23 11:15 by justjavac, 221 阅读, 收藏, 编辑
摘要:
问题:怎样在模板中个别显示表单字段?解决:你可以使用’render()’方法在你的模板中显示部分的表单字段。假设你想创建一个名字/姓氏表单。很简单,只有两个字段,不需要验证,只是为了测试目的。from web import formsimple_form = form.Form( form.Textbox('name', description='Name'), form.Textbox('surname', description='Surname'),)通常你可以使用simple_form.render()或simple_fo 阅读全文
Web.py Cookbook 简体中文版 - File Upload Recipe
2012-11-23 11:15 by justjavac, 176 阅读, 收藏, 编辑
摘要:
问题如果你不是很了解表单上传或者CGI的话, 你会觉得文件上传有点奇特.解决方法import weburls = ('/upload', 'Upload')class Upload: def GET(self): return """<html><head></head><body><form method="POST" enctype="multipart/form-data" action=""><inp 阅读全文
Web.py Cookbook 简体中文版 - 模板文件中的i18n支持
2012-11-23 11:14 by justjavac, 168 阅读, 收藏, 编辑
摘要:
问题:在web.py的模板文件中, 如何得到i18n的支持?Solution:项目目录结构:proj/ |- code.py |- i18n/ |- messages.po |- en_US/ |- LC_MESSAGES/ |- messages.po |- messages.mo |- templates/ |- hello.html文件: proj/code.py#!/usr/bin/env python# encoding: utf-8impor... 阅读全文
Web.py Cookbook 简体中文版 - Hello World!
2012-11-23 11:14 by justjavac, 166 阅读, 收藏, 编辑
摘要:
问题如何用web.py实现Hello World!?解法import weburls = ("/.*", "hello")app = web.application(urls, globals())class hello: def GET(self): return 'Hello, world!'if __name__ == "__main__": app.run()提示:要保证网址有无’/’结尾,都能指向同一个类。就要多写几行代码,如下:在URL开头添加代码:'/(.*)/', 'redire 阅读全文
Web.py Cookbook 简体中文版 - 站点布局模板
2012-11-23 11:13 by justjavac, 228 阅读, 收藏, 编辑
摘要:
问题如何让站点每个页面共享一个整站范围的模板?(在某些框架中,称为模板继承,比如ASP.NET中的母版页)方法我们可以用 base 属性来实现:render = web.template.render('templates/', base='layout')现在如果你调用render.foo()方法,将会加载templates/foo.html模板,并且它将会被templates/layout.html模板包裹。“layout.html” 是一个简单模板格式文件,它包含了一个模板变量,如下:$def with (content)<html><h 阅读全文
Web.py Cookbook 简体中文版 - db.insert 向数据库中新增数据
2012-11-23 11:13 by justjavac, 165 阅读, 收藏, 编辑
摘要:
问题如何向数据加新增数据?解决办法在 0.3 中,数据库连接如下:db = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')数据库连接写好以后,“insert” 操作如下:# 向 'mytable' 表中插入一条数据sequence_id = db.insert('mytable', firstname="Bob",lastname="Smith",joindate=web.SQLL 阅读全文
Web.py Cookbook 简体中文版 - web.input
2012-11-23 11:13 by justjavac, 203 阅读, 收藏, 编辑
摘要:
web.input问题如何从form或是url参数接受用户数据.解决方法web.input()方法返回一个包含从url(GET方法)或http header(POST方法,即表单POST)获取的变量的web.storage对象(类似字典).举个例子,如果你访问页面http://example.com/test?id=10,在Python后台你想取得 id=10 ,那么通过web.input()那就是小菜一碟:class SomePage: def GET(self): user_data = web.input() return "<h1>" + user_d. 阅读全文
Web.py Cookbook 简体中文版 - 管理自带webserver日志
2012-11-23 11:12 by justjavac, 333 阅读, 收藏, 编辑
摘要:
问题如何操作web.py自带的webserver的日志?解法我们可以用wsgilog来操作内置的webserver的日志,并做其为中间件加到应用中。如下,写一个Log类继承wsgilog.WsgiLog,在_init_中把参数传给基类,如这个例子:import sys, loggingfrom wsgilog import WsgiLog, LogIOimport configclass Log(WsgiLog): def __init__(self, application): WsgiLog.__init__( self, a... 阅读全文
Web.py Cookbook 简体中文版 - 上传文件大小限定
2012-11-23 11:12 by justjavac, 214 阅读, 收藏, 编辑
摘要:
问题如何限定上传文件的大小?Solutionweb.py 使用cgi模块来解析用户的输入, 而cgi模块对最大输入大小有限制。下面的代码限制了最大数据输入为 10MB.import cgi# Maximum input we will accept when REQUEST_METHOD is POST# 0 ==> unlimited inputcgi.maxlen = 10 * 1024 * 1024 # 10MB请注意这是对POST方法提交数据大小的限制,而不是上传文件大小。当然如果表单中没有其他输入数据,上传文件完全可以达到限制的大小。cgi模块将会抛出ValueError异常, 阅读全文
Web.py Cookbook 简体中文版 - 从post读取原始数据
2012-11-23 11:11 by justjavac, 193 阅读, 收藏, 编辑
摘要:
介绍有时候,浏览器会通过post发送很多数据。在webpy,你可以这样操作。代码class RequestHandler(): def POST(): data = web.data() # 通过这个方法可以取到数据 阅读全文
Web.py Cookbook 简体中文版 - deploying web.py with nginx and mod_wsgi
2012-11-23 11:11 by justjavac, 128 阅读, 收藏, 编辑
摘要:
t is possible to deploy web.py with nginx using a mod_wsgi similar to the module for Apache.After compiling and installing nginx with mod_wsgi, you can easily get a web.py app up and running with the following config* (edit the paths and settings with your own):wsgi_python_executable /usr/bin/pytho. 阅读全文
Web.py Cookbook 简体中文版 - 使用Apache + mod_wsgi部署webpy应用
2012-11-23 11:11 by justjavac, 255 阅读, 收藏, 编辑
摘要:
下面的步骤在Apache-2.2.3 (Red Hat Enterprise Linux 5.2, x86_64),mod_wsgi-2.0中测试通过。(译者注:本人在Windows2003 + Apache-2.2.15 + mod_wsgi-3.0也测试通过)注意:您可以使用您自己的项目名称替换’appname’。您可以使用您自己的文件名称替换’code.py’。/var/www/webpy-app 为包含您的code.py的文件夹目录路径。/var/www/webpy-app/code.py 是您的python文件的完整路径。步骤:下载和安装mod_wsgi从它的网站:http://co 阅读全文
Web.py Cookbook 简体中文版 - sqlalchemy
2012-11-23 11:10 by justjavac, 269 阅读, 收藏, 编辑
摘要:
问题如何在web.py中使用sqlalchemy方案创建一个钩子并使用sqlalchemy的scoped session(http://www.sqlalchemy.org/docs/05/session.html#unitofwork_contextual)import stringimport randomimport webfrom sqlalchemy.orm import scoped_session, sessionmakerfrom models import *urls = ( "/", "add", "/view", 阅读全文
Web.py Cookbook 简体中文版 - 跳转(seeother)与重定向(redirect)
2012-11-23 11:10 by justjavac, 373 阅读, 收藏, 编辑
摘要:
web.seeother 和 web.redirect问题在处理完用户输入后(比方说处理完一个表单),如何跳转到其他页面?解法class SomePage: def POST(self): # Do some application logic here, and then: raise web.seeother('/someotherpage')POST方法接收到一个post并完成处理之后,它将给浏览器发送一个303消息和新网址。接下来,浏览器就会对这个新网址发出GET请求,从而完成跳转。注意:web.seeother和web.redirect不支持0.3以... 阅读全文
Web.py Cookbook 简体中文版 - 提供静态文件 (诸如js脚本, css样式表和图象文件)
2012-11-23 11:09 by justjavac, 344 阅读, 收藏, 编辑
摘要:
问题如何在web.py自带的web server中提供静态文件访问?解法在当前应用的目录下,创建一个名为static的目录,把要提供访问的静态文件放在里面即可。例如, 网址http://localhost/static/logo.png将发送./static/logo.png给客户端。 阅读全文
Web.py Cookbook 简体中文版 - 用cherrypy提供SSL支持
2012-11-23 11:09 by justjavac, 213 阅读, 收藏, 编辑
摘要:
问题如何用内置的cheerypy提供SSL支持?解法import webfrom web.wsgiserver import CherryPyWSGIServerCherryPyWSGIServer.ssl_certificate = "path/to/ssl_certificate"CherryPyWSGIServer.ssl_private_key = "path/to/ssl_private_key"urls = ("/.*", "hello")app = web.application(urls, glob 阅读全文
Web.py Cookbook 简体中文版 - 整合 SQLite UDF (用户定义函数) 到 webpy 数据库层
2012-11-23 11:09 by justjavac, 367 阅读, 收藏, 编辑
摘要:
问题:用户在邮件列表中询问,我把它放在这里作为将来使用和参考。解决:您可以添加到Python函数到SQLite,并让它们在您的查询调用。示例:>>> import sqlite3 as db>>> conn = db.connect(":memory:")>>> conn.create_function("sign", 1, lambda val: val and (val > 0 and 1 or -1))>>> cur = conn.cursor()>>> 阅读全文
Web.py Cookbook 简体中文版 - 保存上传的文件
2012-11-23 11:08 by justjavac, 222 阅读, 收藏, 编辑
摘要:
问题上传文件,并将其保存到预先设定的某个目录下。方法import weburls = ('/upload', 'Upload')class Upload: def GET(self): web.header("Content-Type","text/html; charset=utf-8") return """<html><head></head><body><form method="POST" enctype=&q 阅读全文
Web.py Cookbook 简体中文版 - 在webpy中使用Cheetah模板引擎
2012-11-23 11:07 by justjavac, 297 阅读, 收藏, 编辑
摘要:
问题:怎样在webpy中使用Cheetah模板引擎?解决:您需要先安装webpy(0.3)和Cheetah:http://www.cheetahtemplate.org/. 然后尝试使用下面的代码段:# encoding: utf-8# File: code.pyimport webfrom web.contrib.template import render_cheetahrender = render_cheetah('templates/')urls = ( '/(first)', 'first', '/(second)', 阅读全文
Web.py Cookbook 简体中文版 - 如何流传输大文件
2012-11-23 11:07 by justjavac, 281 阅读, 收藏, 编辑
摘要:
问题如何流传输大文件?解法要流传输大文件,需要添加传输译码(Transfer-Encoding)区块头,这样才能一边下载一边显示。否则,浏览器将缓冲所有数据直到下载完毕才显示。如果这样写:直接修改基础字符串(例中就是j),然后用Yield返回--是没有效果的。如果要使用Yield,就要向对所有内容使用yield。因为这个函式此时是一个产生器。(注:请处请详看Yield文档,在此不做过多论述。)例子# Simple streaming server demonstration# Uses time.sleep to emulate a large file readimport webimpor 阅读全文
Web.py Cookbook 简体中文版 - 使用子应用
2012-11-23 11:07 by justjavac, 92 阅读, 收藏, 编辑
摘要:
问题如何在当前应用中包含定义在其他文件中的某个应用?解法在blog.py中:import weburls = ( "", "reblog", "/(.*)", "blog")class reblog: def GET(self): raise web.seeother('/')class blog: def GET(self, path): return "blog " + pathapp_blog = web.application(urls, locals())当前的主应用c 阅读全文
Web.py Cookbook 简体中文版 - Import functions into templates
2012-11-23 11:06 by justjavac, 156 阅读, 收藏, 编辑
摘要:
Problem:How can I import a python module in template?Solution:While you write templates, inevitably you will need to write some functions which is related to display logic only. web.py gives you the flexibility to write large blocks of code, including defining functions, directly in the template usi 阅读全文
Web.py Cookbook 简体中文版 - Use Jinja2 template engine in webpy
2012-11-23 11:06 by justjavac, 206 阅读, 收藏, 编辑
摘要:
问题如何在web.py中使用Jinja2模板引擎?方案首先需要安装Jinja2和webpy(0.3), 然后使用下面的代码做测试:import webfrom web.contrib.template import render_jinjaurls = ( '/(.*)', 'hello' )app = web.application(urls, globals())render = render_jinja( 'templates', # 设置模板路径. encoding = 'utf-8', # 编码. )#添加或者修改一些. 阅读全文
Web.py Cookbook 简体中文版 - 在webpy中使用Mako模板引擎
2012-11-23 11:05 by justjavac, 223 阅读, 收藏, 编辑
摘要:
问题如何在webpy中使用Mako模板引擎?解决方案首先需要安装Mako和web.py(0.3):http://www.makotemplates.org/ 然后尝试下面的代码:# encoding: utf-8# File: code.pyimport webfrom web.contrib.template import render_makourls = ( '/(.*)', 'hello' )app = web.application(urls, globals(), autoreload=True)# input_encoding and output 阅读全文
Web.py Cookbook 简体中文版 - How to use templates on Google App Engine
2012-11-23 11:05 by justjavac, 127 阅读, 收藏, 编辑
摘要:
问题如何在 Google App Engine 上使用模板解答web.py templetor 把模板编译成 python 字节码,这需要访问标准库中的 parser 模块。不幸的是,由于安全原因 GAE 禁用了这个模块。为了克服这个状况,web.py 支持把模板编译成 python 代码,从而避免在 GAE 上使用原来的模板。web.py 确保在应用这种方法的时候模板中的代码不需要任何改变。为了编译一个文件夹中所有的模板(一旦有模板改动,就需要重新运行),运行:$ python web/template.py --compile templates以上命令把 templates/ 目录下的模 阅读全文
Web.py Cookbook 简体中文版 - Testing with Paste and Nose
2012-11-23 11:04 by justjavac, 149 阅读, 收藏, 编辑
摘要:
ProblemYou want to test your web.py application.Solutionfrom paste.fixture import TestAppfrom nose.tools import *from code import appclass TestCode(): def test_index(self): middleware = [] app = TestApp(app.wsgifunc(*middleware)) r = app.get('/') assert_equal(r.status,... 阅读全文
Web.py Cookbook 简体中文版 - 怎样使用数据库事务处理
2012-11-23 11:04 by justjavac, 130 阅读, 收藏, 编辑
摘要:
问题:怎样使用数据库事务处理?解决:数据库对象有一个方法“transaction”,将启动一个新的事务,并返回事务对象。这个事务对象可以使用commit提交事务或rollback来回滚事务。import webdb = web.database(dbn="postgres", db="webpy", user="foo", pw="")t = db.transaction()try: db.insert('person', name='foo') db.insert('per 阅读全文
Web.py Cookbook 简体中文版 - db.upate 数据更新
2012-11-23 11:04 by justjavac, 179 阅读, 收藏, 编辑
摘要:
问题向数据库中更新数据。解决方案import webdb = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')db.update('mytable', where="id = 10", value1 = "foo")在查询中有更多关于可用参数的信息。该更新操作会返回更新的影响行数。 阅读全文
Web.py Cookbook 简体中文版 - 理解URL控制
2012-11-23 11:03 by justjavac, 216 阅读, 收藏, 编辑
摘要:
问题:如何为整个网站设计一个URL控制方案 / 调度模式解决:web.py的URL控制模式是简单的、强大的、灵活的。在每个应用的最顶部,你通常会看到整个URL调度模式被定义在元组中:urls = ( "/tasks/?", "signin", "/tasks/list", "listing", "/tasks/post", "post", "/tasks/chgpass", "chgpass", "/tasks/act&quo 阅读全文
Web.py Cookbook 简体中文版 - 在PostgreSQL下实现用户认证
2012-11-23 11:02 by justjavac, 183 阅读, 收藏, 编辑
摘要:
问题如何利用PostgreSQL数据库实现一个用户认证系统?解法用户认证系统有很多功能。在这个例子中,将展示如何在PostgreSQL数据库环境下一步一步完成一个用户认证系统必需因为要用到make模板和postgreSQL数据库,所以要: import web from web.contrib.template import render_mako import pg第一步:创建数据库首先,为创建一个用户表。虽然这个表结构非常简单,但对于大部分项目来说都足够用了。#CREATE TABLE example_users( id serial NOT NULL, user character .. 阅读全文
Web.py Cookbook 简体中文版 - 用户认证
2012-11-23 11:02 by justjavac, 154 阅读, 收藏, 编辑
摘要:
问题如何完成一个用户认证系统?解法用户认证系统由这几个部分组成:用户添加,用户登录,用户注销以及验证用户是否已登录。用户认证系统一般都需要一个数据库。在这个例子中,我们要用到MD5和SQLite。#import hashlibimport web def POST(self): i = web.input() authdb = sqlite3.connect('users.db') pwdhash = hashlib.md5(i.password).hexdigest() check = authdb.execute('select * from users wh... 阅读全文
Web.py Cookbook 简体中文版 - 使用字典动态构造where子句
2012-11-23 11:01 by justjavac, 205 阅读, 收藏, 编辑
摘要:
问题你希望创建一个字典来构造动态的where子句并且希望能够在查询语句中使用。解决>>> import web>>> db = web.database(dbn='postgres', db='mydb', user='postgres')>>> where_dict = {'col1': 1, col2: 'sometext'}>>> db.delete('mytable', where=web.db.sqlwhere(whe 阅读全文
Web.py Cookbook 简体中文版 - 用soaplib实现webservice
2012-11-23 11:01 by justjavac, 219 阅读, 收藏, 编辑
摘要:
问题如何用soaplib实现webservice?解法Optio的soaplib通过用装饰器指定类型,从而直接编写SOAP web service。而且它也是到目前为止,唯一为web service提供WSDL文档的Python类库。import web from soaplib.wsgi_soap import SimpleWSGISoapAppfrom soaplib.service import soapmethodfrom soaplib.serializers import primitive as soap_typesurls = ("/hello", &quo 阅读全文
Web.py Cookbook 简体中文版 - 提供XML访问
2012-11-23 11:00 by justjavac, 213 阅读, 收藏, 编辑
摘要:
问题如何在web.py中提供XML访问?如果需要为第三方应用收发数据,那么提供xml访问是很有必要的。解法根据要访问的xml文件(如response.xml)创建一个XML模板。如果XML中有变量,就使用相应的模板标签进行替换。下面是一个例子:$def with (code)<?xml version="1.0"?><RequestNotification-Response><Status>$code</Status></RequestNotification-Response>为了提供这个XML,需要创建一个单独 阅读全文
web.py 0.3 新手指南 - RESTful doctesting using app.request
2012-11-23 10:59 by justjavac, 210 阅读, 收藏, 编辑
摘要:
!/usr/bin/env python"""RESTful web.py testingusage: python webapp.py 8080 [--test]>>> req = app.request('/mathematicians', method='POST')>>> req.status'400 Bad Request'>>> name = {'first': 'Beno\xc3\xaet', 'last 阅读全文
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
2012-11-23 10:59 by justjavac, 238 阅读, 收藏, 编辑
摘要:
问题:您要执行的SQL语句如:高级的联接或计数。解决:webpy不会尝试为您和您的数据库建立层。相反,它试图以方便的通用任务,走出自己的方式,当您需要做的更高级的主题。执行高级的数据库查询是没有什么不同。例如:import webdb = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')results = db.query("SELECT COUNT(*) AS total_users FROM users")print result 阅读全文
web.py 0.3 新手指南 - 多数据库使用
2012-11-23 10:59 by justjavac, 117 阅读, 收藏, 编辑
摘要:
问题如何在单独项目中应用多数据库?解决办法webpy 0.3 支持多数据库操作,并从web模块中移走数据库部分, 使其成为一个更典型的对象. 例子如下:import webdb1 = web.database(dbn='mysql', db='dbname1', user='foo')db2 = web.database(dbn='mysql', db='dbname2', user='foo')print db1.select('foo', where='id=1' 阅读全文
web.py 0.3 新手指南 - 实时语言切换
2012-11-23 10:58 by justjavac, 251 阅读, 收藏, 编辑
摘要:
问题:如何实现实时语言切换?解法:首先你必须阅读模板语言中的i18n支持, 然后尝试下面的代码。文件: code.pyimport osimport sysimport gettextimport web# File location directory.rootdir = os.path.abspath(os.path.dirname(__file__))# i18n directory.localedir = rootdir + '/i18n'# Object used to store all translations.allTranslations = web.stor 阅读全文
web.py 0.3 新手指南 - 发送邮件
2012-11-23 10:57 by justjavac, 169 阅读, 收藏, 编辑
摘要:
问题在web.py中,如何发送邮件?解法在web.py中使用web.sendmail()发送邮件.web.sendmail('cookbook@webpy.org', 'user@example.com', 'subject', 'message')如果在web.config中指定了邮件服务器,就会使用该服务器发送邮件,否则,就根据/usr/lib/sendmail中的设置发送邮件。web.config.smtp_server = 'mail.mydomain.com'如果要发送邮件给多个收件人,就给to_addr 阅读全文
web.py 0.3 新手指南 - db.select 查询
2012-11-23 10:57 by justjavac, 241 阅读, 收藏, 编辑
摘要:
问题:怎样执行数据库查询?解决方案:如果是0.3版本, 连接部分大致如下:db = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')当获取数据库连接后, 可以这样执行查询数据库:# Select all entries from table 'mytable'entries = db.select('mytable')select方法有下面几个参数:varswhatwhereordergrouplimitoffsettes 阅读全文
web.py 0.3 新手指南 - 在调试模式下使用session
2012-11-23 10:56 by justjavac, 309 阅读, 收藏, 编辑
摘要:
问题如何在调试模式下使用session?解法使用web.py自带的webserver提供web服务时,web.py就运行在调试模式下。当然最简单的办法就是禁用调试,只要令web.config.debug = False即可。import webweb.config.debug = False# rest of your code如果非要用调试模式下使用session,可以用非主流的一些办法。哈哈因为调试模式支持模块重载入(重载入,绝非重载。是reload,而非override),所以reloader会载入主模块两次,因此,就会创建两个session对象。但我们只要把session存储在全局的数 阅读全文
web.py 0.3 新手指南 - 在template中使用session
2012-11-23 10:56 by justjavac, 201 阅读, 收藏, 编辑
摘要:
问题:我想在模板中使用session(比如:读取并显示session.username)解决:在应用程序中的代码:render = web.template.render('templates', globals={'context': session})在模板中的代码:<span>You are logged in as <b>$context.username</b></span>你可以真正的使用任何符合语法的python变量名,比如上面用的_context_。我更喜欢在应用中直接使用’session’。 阅读全文
web.py 0.3 新手指南 - 如何用Gmail发送邮件
2012-11-23 10:56 by justjavac, 132 阅读, 收藏, 编辑
摘要:
问题如何用Gmail发送邮件?解法安装和维护邮件服务器通常是沉闷乏味的。所以如果你有Gmail帐号,就可以使用Gmail做为SMTP服务器来发送邮件,我们唯一要做的就只是在web.config中指定Gmail的用户名和密码。web.config.smtp_server = 'smtp.gmail.com'web.config.smtp_port = 587web.config.smtp_username = 'cookbook@gmail.com'web.config.smtp_password = 'secret'web.config.smtp 阅读全文
web.py 0.3 新手指南 - 在子应用下使用session
2012-11-23 10:55 by justjavac, 192 阅读, 收藏, 编辑
摘要:
提示这个解决方案是来自web.py邮件列表。this问题如何在子应用中使用session?解法web.py默认session信息只能在主应用中共享,即便在其他模块中import Session都不行。在app.py(或main.py)可以这样初始化session:session = web.session.Session(app, web.session.DiskStore('sessions'),initializer = {'test': 'woot', 'foo':''}).. 接下来创建一个被web.loa 阅读全文
web.py 0.3 新手指南 - Sessions
2012-11-23 10:55 by justjavac, 155 阅读, 收藏, 编辑
摘要:
问题如何在web.py中使用session解法注意!!!:session并不能在调试模式(Debug mode)下正常工作,这是因为session与调试模试下的重调用相冲突(有点类似firefox下著名的Firebug插件,使用Firebug插件分析网页时,会在火狐浏览器之外单独对该网页发起请求,所以相当于同时访问该网页两次),下一节中我们会给出在调试模式下使用session的解决办法。web.session模块提供session支持。下面是一个简单的例子--统计有多少人正在使用session(session计数器):import webweb.config.debug = Falseurls 阅读全文
web.py 0.3 新手指南 - 安装
2012-11-23 10:53 by justjavac, 276 阅读, 收藏, 编辑
摘要:
Summary安装开发产品LightTPD.. 使用 FastCGIApache.. 使用 CGI.. 使用 CGI using .htaccess.. 使用 FastCGI.. 使用 SCGI.. 使用 mod_python.. 使用 mod_wsgi.. 使用 mod_rewrite安装安装web.py, 请先下载:http://webpy.org/static/web.py-0.33.tar.gz解压并拷贝web文件夹到你的应用程序目录下。 或者,为了让所有的应用程序都可以使用,运行:python setup.py install注意: 在某些类unix系统上你可能需要切换到root用户 阅读全文
web.py 0.3 新手指南 - 模板系统
2012-11-23 10:53 by justjavac, 278 阅读, 收藏, 编辑
摘要:
Introductionweb.py 的模板语言叫做Templetor,它能负责将 python 的强大功能传递给模板系统。 在模板中没有重新设计语法,它是类 python 的。 如果你会 python,你可以顺手拈来。这是一个模板示例:$def with (name)Hello $name!第一行表示模板定义了一个变量name。 第二行中的$name将会用name的值来替换。如果是从 web.py 0.2 升级请看这里升级部分。使用模板系统通用渲染模板的方法:render = web.template.render('templates')return render.hell 阅读全文
web.py 0.3 新手指南 - FAQ
2012-11-23 10:52 by justjavac, 242 阅读, 收藏, 编辑
摘要:
如何使用template.py模板?基本的文档内容与一些代码片段,请查看template.py doc通过web.py应用显示页面,使用如下 homepage = template.Template(open("homepage.tmpl").read()) print homepage()为什么urls是一个长长的数组?如果是一个dictionary,那么就不会被排序好。 如果是一个tuples数组, 那需要更加多的文字输入。如何来通过web.py服务器来处理静态文件比如JavaScripts 或像PNG、JPG这些图片?在运行web.py服务代码的目录下创建一个文件夹命 阅读全文
web.py 0.3 新手指南
2012-11-23 10:51 by justjavac, 223 阅读, 收藏, 编辑
摘要:
开始你知道Python同时你希望制作一个网站。 那么web.py正好提供了一种简单的方法。如果你希望读完整个指南, 你需要安装Python, web.py, flup, psycopg2, 和Postgres (或者等价的数据库和Python驱动)。 详细,可以查看webpy.org.如果你已经有了一个web.py项目,请看看升级页面的相关信息。准备开始。URL 处理任何网站最重要的部分就是它的URL结构。你的URL并不仅仅只是访问者所能看到并且能发给朋友的。它还规定了你网站运行的心智模型。在一些类似del.icio.us的流行网站 , URL甚至是UI的一部分。 web.py使这类强大的UR 阅读全文
代码之谜(五)- 浮点数(谁偷了你的精度?)
2012-11-16 17:03 by justjavac, 1763 阅读, 收藏, 编辑
摘要:
如果我告诉你,中关村配置最高的电子计算机的计算精度还不如一个便利店卖的手持计算器,你一定会反驳我:「今天写博客之前又忘记吃药了吧」。你可以用最主流的编程语言计算0.2 + 0.4,如果你使用的是 Chrome、FireFox、IE 8+,可以按 F12 键,然后找到 「控制台」,输入上面的表达式0.2 + 0.4,回车。然后再用最简陋的计算器(如果你没有手持计算器没关系,手机、电脑都自带一个计算器,打开“运行”,输入calc,回车) 再计算一下刚才的算式0.2 + 0.4。怎么样?同意我的观点了吧!再简陋的计算器也比超级计算器的精度高,关键不在于它的频率和内存,而在于它是如何设计、如何表示、如 阅读全文
千万不要把 bool 当成函数参数
2012-11-16 12:56 by justjavac, 3693 阅读, 收藏, 编辑
摘要:
我们有很多 Coding Style 或 代码规范。 但这一条可能会经常被我们所遗忘,就是我们经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性。 不信?我们先来看看下面的代码。当你读到下面的代码,你会觉得这个代码是什么意思?widget->repaint(false);是不要 repaint 吗?还是别的什么意思?看了文档后,我们才知道这个参数是 immediate,也就是说,false 代表不立即重画,true 代码立即重画。Windows API 中也有这样一个函数:InvalidateRect,当你看到下面的代码,你会觉得是什么意思?InvalidateRect(h 阅读全文
代码之谜(四)- 浮点数(从惊讶到思考)
2012-11-16 11:30 by justjavac, 1024 阅读, 收藏, 编辑
摘要:
在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。一次面试记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的程序员。 每次聚会他都会告诉我,“那次面试彻底改变了我的过去的学习方式, 我以前只是盲目接受知识,根本就没有自己思考过, 那次对话,比我大学四年学到的知识都多”。我看他简历上写到读过《信息论》才谈了很多关于二分 阅读全文
代码之谜(三)- 运算符
2012-11-16 08:22 by justjavac, 1905 阅读, 收藏, 编辑
摘要:
从最简单的运算符加号(+)说起,加号(+)是个二元运算符——也就是说,加号只把两个数联接起来,从来不把第三个或者更多的联接起来。因此,“1加2加3” 在计算机中被表述为:(1 + 2) + 3 // a或者1 + (2 + 3) // b虽然我们通常写做1 + 2 + 3,但是并不意味这它和我们数学中的 1+2+3 是等价的。那么数学中的 1+2+3 到底表示的是 a 呢,还是 b 呢?如果计算机的求值是左结合的,那么此表达式等价于第一种a; 如果是右结合的,那么此表达式等价于第二种b。1 + 2 + 3简单的理解就是 “把1、2、3加在一起”, 确实,在我们接触到的数学里... 阅读全文
代码之谜(二)- 语句与表达式
2012-11-15 14:59 by justjavac, 1223 阅读, 收藏, 编辑
摘要:
虽然文章标题是『语句与表达式』,在这篇文章中,我将陈述一个观点每个表达式都有一个值。 在此之外,也会继续表述这个『代码之谜』系列的主题——数学与计算机之间被经常忽略的矛盾。简单的讲“表达式”(expression)是一个单纯的运算过程,总是有返回值;“语句”(statement)是执行某种操作,没有返回值。使用表达式也是函数式编程语言所提倡的,而传统命令式编程语言都是语句的堆砌。表达式和语句如何区分呢? 最简单最直观的鉴别方法就是,后面有分号的是语句, 这是一个充分条件而不是必要条件。 有分号,就是语句;没有分号,就不一定了,也可能是语句,也可能是表达式。在动态语言——比如javascript 阅读全文
代码之谜(一)- 有限与无限(从整数的绝对值说起)
2012-11-15 11:55 by justjavac, 1770 阅读, 收藏, 编辑
摘要:
一、引子开始本章之前我先提个问题:“如果一个整数的绝对值等于它自己,那么这个数是几?”如果你回答是 0 和 所有正数,那么请你耐心读完这篇文章吧。本章是我『代码之谜』系列的第二篇,前一篇『代码之谜 - 开篇/前言/序』简单介绍了计算机与数学的不同。数学中有许多复杂深刻的矛盾,数学家的工作就是解释或者反驳这些矛盾, 例如有限与无限、连续与离散、存在与构造、逻辑与直观、具体与抽象、概念与计算等等。在本章中,我们把目标缩小,主要讨论内容概念: 有限与无限对象: 8bit整数二、绝对值之谜终于到主题了,也许你很想知道“负数的绝对值可能等于自己吗?”,也就是 “如果x等于-x,那么x有几个解?”按照我一 阅读全文
自己动手设计 PHP MVC 框架(一)——URL
2012-11-09 12:49 by justjavac, 611 阅读, 收藏, 编辑
摘要:
在框架盛行的今天,MVC 也不再是神话。 经常听到很多程序员讨论哪个框架好,哪个框架不好, 其实框架只是工具,没有好与不好,只有适合与不适合,适合自己的就是最好的。每次我面试应届生时都会问他使用过什么框架,并谈谈对这些框架的理解。 当面试有经验的程序员时,会让他自己写一个框架出来。 其实也不是让他编码,只要有思路就 OK 了。 我觉得,如果一个有一年经验的程序员连一个 Framework v0.0.1 都开发不出来的话,肯定是没有深入理解一个框架。前几天 @phoenixg 说要自己写个 MVC 框架。 而且他也确实不仅仅是说说而已,短短一个周末,这个框架雏形就神奇的出现在了github上。这 阅读全文
代码之谜(零)- 其实,你不懂代码
2012-11-08 13:45 by justjavac, 960 阅读, 收藏, 编辑
摘要:
2012年9月28日 13时32分 新增最近看本文评论,争议很多,我先说说这篇文章的前世今生吧。我原文标题是『代码之谜 - 开篇/前言/序』,副标题是『其实,你不懂代码』,本来打算用“其实,代码中的运算符不等价于数学符号”。原文我写于2010年底,当时写在 evernote 中,用了”群“、”域“、”集合“、”关系“的概念解释了计算机中用二进制表示的离散的数和现实中连续的数之间的关系和区别。前几天QQ群里有人问道,遂打算写一个系列,用比较”贫“的语言把他们讲述出来。原文首发在我的博客:http://justjavac.com/codepuzzle/2012/09/25/codepuzzle-i 阅读全文