Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tornado.web, tornado.ioloop, tornado.template
- import motor
- db = motor.MotorClient().test
- class NewMessageHandler(tornado.web.RequestHandler):
- def get(self):
- """Show a 'compose message' form."""
- self.write('''
- <form method="post">
- <input type="text" name="msg">
- <input type="submit">
- </form>''')
- # Method exits before the HTTP request completes, thus "asynchronous"
- @tornado.web.asynchronous
- def post(self):
- """Insert a message."""
- msg = self.get_argument('msg')
- # Async insert; callback is executed when insert completes
- self.settings['db'].messages.insert(
- {'msg': msg},
- callback=self._on_response)
- def _on_response(self, result, error):
- if error:
- raise tornado.web.HTTPError(500, error)
- else:
- self.redirect('/')
- class MessagesHandler(tornado.web.RequestHandler):
- @tornado.web.asynchronous
- def get(self):
- """Display all messages"""
- self.write('<a href="/compose">Compose a message</a><br>')
- self.write('<ul>')
- ldb = self.settings['db']
- (ldb.messages.find()
- .sort([('_id', -1)])
- .to_list(self._got_messages, length=10))
- def _got_messages(self, messages, error):
- if error:
- raise tornado.web.HTTPError(500, error)
- elif messages:
- self.write(messages_template.generate(messages=messages))
- self.finish()
- application = tornado.web.Application(
- [
- (r'/compose', NewMessageHandler),
- (r'/', MessagesHandler)
- ],
- db=db
- )
- messages_template = tornado.template.Template('''<ul>
- {% for message in messages %}
- <li>{{ message['msg'] }}</li>
- {% end %}
- </ul>''')
- print('Listening on http://localhost:8888')
- application.listen(8888)
- tornado.ioloop.IOLoop.instance().start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement