##language:zh #pragma section-numbers on {{http://webpy.org/static/webpy.gif}} WebPy ~ 超轻量WSGI 应用框架 ::-- ZoomQuiet [<<DateTime(2008-02-24T06:19:46Z)>>] <<TableOfContents>> ## 默许导航,请保留 <<Include(CPUGnav)>> `web.py 0.3 的食谱格式文档.` = web.py 食谱 = * [[http://webpy.org/cookbook|web.py Cook Book]] ~ 中文翻译 == Hello World! == 命题:: 怎么使用web.py 写个''hello world''? 解决:: {{{#!python import web urls = ("/.*", "hello") app = web.application(urls, globals()) class hello: def GET(self): return 'Hello, world!' if __name__ == "__main__": app.run() }}} == 客户对话~Sessions == 命题:: 如果在web.py 中运用 客户对话? 解决:: * `web.session`模块专门进行了支持,以下实例 {{{#!python import web urls = ( "/count", "count", "/reset", "reset" ) app = web.application(urls, locals()) session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0}) class count: def GET(self): session.count += 1 return str(session.count) class reset: def GET(self): session.kill() return "" if __name__ == "__main__": app.run() }}} * 对话对象在响应请求句柄前加载,前在请求句柄后保存变更 * `initializer` 参数用以初创对话 == 邮件 == 命题:: 如何通过 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_address` 参数中指定多个地址 {{{ web.sendmail('cookbook@webpy.org' , ['user1@example.com', 'user2@example.com'] , 'subject', 'message') }}} * 使用`cc`和`bcc`键参数,则声明转发和暗送邮箱地址(使用列表,同樣支持多地址Cc Bcc) {{{ web.sendmail('cookbook@webpy.org', 'user@example.com', 'subject', 'message', cc='user1@example.com', bcc='user2@example.com') }}} == 网站排版模板 == 命题::Problem 如何在web.py 应用中使用排版模板? 解决:: 在应用过程中直接使用 {{{#!python app = web.application(urls, gloabals) render = web.template.render('templates/') def layout_processor(handle): result = handle() return render.layout(result) app.add_processor(layout_processor) }}} == 文件上传 == 命题:: 即使你对表单上传或是CGI生成不熟悉,文件上传也可以轻易支持的 解决:: {{{ import web urls = ('/upload', 'Upload') class Upload: def GET(self): return """<html><head></head><body> <form method="POST" enctype="multipart/form-data" action=""> <input type="file" name="myfile" /> <br/> <input type="submit" /> </form> </body></html>""" def POST(self): x = web.input(myfile={}) web.debug(x['myfile'].value) # This is the file contents web.debug(x['myfile'].filename) # This is the filename web.redirect('/upload') app = web.application(urls, globals()) if __name__ == "__main__": app.run() }}} 探讨:: 有些事儿得注意: * 对应表单必须有`enctype="multipart/form-data"`聲明,否则不会起作用 * 在 webpy 代码中, 如果将文件作为想导入CGI`FieldStorage`对象,默认值是必须的(myfile={}部分) . * 否则将被视作文本文件-- 此例中,你这无法知道文件命了. == 预备命题 == * How to properly use web.background == 反馈 ==