easy_tornado is a tornado extension to make fast and easy to set up a web application with tornado webserver.
Source code at: http://github.com/felipecruz/tornado
import tornado.httpserver
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
from tornado.contrib.easy_app import start, \
expose_get
@expose_get('/home/')
def home(tornado):
tornado.write("Hello World")
start(__name__)
It will expose your function as get or post (@expose_get or @expose_set) to the url set on those decorators. Tornado parameter let you acess all tornado functions (write and render for example)
easy_tornado provides you another options
It allow you to expose methods on some Class, with some settings. It’s very helpful to write small web applications as you write object-oriented systems.
code:
from tornado.contrib.easy_app import start, expose_get, expose_post
import os, datetime
settings = {
"static_path": os.path.join(os.path.dirname(__file__), "static"),
}
class WikiPage():
def __init__(self, id, content, parent=None):
self.id = id
self.content = content
self.history = []
self.last_modify = datetime.datetime.now()
self.parent = parent
class Wiki():
pages = {}
def __init__(self):
Wiki.pages['Teste'] = 'Pagina de Teste'
@expose_get('/create')
def page_create_page(self, tornado):
tornado.render('templates/create_page.html')
@expose_post('/post')
def create_page(self, tornado):
page = None
wikipage = WikiPage(tornado.get_argument('name'), tornado.get_argument('content'), None)
wikipage.last_modify = datetime.datetime.now()
if wikipage.id in Wiki.pages:
page = Wiki.pages[wikipage.id]
if not page:
Wiki.pages[wikipage.id] = wikipage
tornado.redirect("/get/%s" % tornado.get_argument('name'))
@expose_get('/get/(.+)')
def get_page(self, id, tornado):
if id in Wiki.pages:
tornado.write(Wiki.pages[id])
else:
return None
start(Wiki, settings)
It will expose all classes in your module to ‘target’ attribute, both get and post methods
code:
from tornado.contrib.easy_app import start
class MainHandler():
target = r'/(\w+)'
def get(self, name):
self.write("Hello %s" % name)
start(__name__)