web.py 0.3 新手指南 - RESTful doctesting using app.request
2012-11-23 10:59
483 查看
!/usr/bin/env python
""" RESTful web.py testing usage: python webapp.py 8080 [--test] >>> req = app.request('/mathematicians', method='POST') >>> req.status '400 Bad Request' >>> name = {'first': 'Beno\xc3\xaet', 'last': 'Mandelbrot'} >>> data = urllib.urlencode(name) >>> req = app.request('/mathematicians', method='POST', data=data) >>> req.status '201 Created' >>> created_path = req.headers['Location'] >>> created_path '/mathematicians/b-mandelbrot' >>> fn = '<h1 class="fn">{0} {1}</h1>'.format(name['first'], name['last']) >>> assert fn in app.request(created_path).data """ import doctest import urllib import sys import web paths = ( '/mathematicians(/)?', 'Mathematicians', '/mathematicians/([a-z])-([a-z]{2,})', 'Mathematician' ) app = web.application(paths, globals()) dbname = {True: 'test', False: 'production'}[sys.argv[-1] == '--test'] db = {} # db = web.database(..., db='math_{0}'.format(dbname)) class Mathematicians: def GET(self, slash=False): """list all mathematicians and form to create new one""" if slash: raise web.seeother('/mathematicians') mathematicians = db.items() # db.select(...) return web.template.Template("""$def with (mathematicians) <!doctype html> <html> <head> <meta charset=utf-8> <title>Mathematicians</title> </head> <body> <h1>Mathematicians</h1> $if mathematicians: <ul class="blogroll"> $for path, name in mathematicians: <li class="vcard"><a class="fn url" href=/mathematicians/$path>$name.first $name.last</a></li> </ul> <form action=/mathematicians method=post> <label>First <input name=first type=text></label> <label>Last <input name=last type=text></label> <input type=submit value=Add> </form> </body> </html>""")(mathematicians) def POST(self, _): """create new mathematician""" name = web.input('first', 'last') key = '{0}-{1}'.format(name.first[0].lower(), name.last.lower()) name.first, name.last = name.first.capitalize(), name.last.capitalize() db[key] = name # db.insert(...) path = '/mathematicians/{0}'.format(key) web.ctx.status = '201 Created' web.header('Location', path) return web.template.Template("""$def with (path, name) <!doctype html> <html> <head> <meta charset=utf-8> <title>Profile Created</title> </head> <body> <p>Profile created for <a href=$path>$name.first $name.last</a>.</p> </body> </html>""")(path, name) class Mathematician: def GET(self, first_initial, last_name): """display mathematician""" key = '{0}-{1}'.format(first_initial, last_name) try: mathematician = db[key] # db.select(...) except KeyError: raise web.notfound() return web.template.Template("""$def with (name) <!doctype html> <html> <head> <meta charset=utf-8> <title>$name.first $name.last</title> </head> <body class="vcard"> <p><a href=/mathematicians rel=up>Mathematicians</a> ▸</p> <h1 class="fn">$name.first $name.last</h1> </body> </html>""")(mathematician) if __name__ == "__main__": if sys.argv[-1] == '--test': doctest.testmod() else: app.run()
相关文章推荐
- web.py 0.3 新手指南 - 实时语言切换
- web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
- web.py 0.3 新手指南 - 多数据库使用
- Webpy 0.3新手指南
- web.py 0.3 新手指南
- web.py 0.3 新手指南
- Python Web框架----web.py 0.3 新手指南
- web.py 0.3 新手指南 - FAQ
- web.py 0.3 新手指南 - db.select 查询
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 安装
- web.py 0.3 新手指南 - 模板系统
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 在子应用下使用session
- web.py 0.3 新手指南
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - Sessions
- web.py 0.3 新手指南 - 在调试模式下使用session
- web.py 0.3 新手指南 - 在template中使用session
- web.py 0.3 新手指南 - 如何用Gmail发送邮件