Advertisement
svgroz

Untitled

Apr 23rd, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. import tornado.web, tornado.ioloop, tornado.template
  2. import motor
  3.      
  4. db = motor.MotorClient().test
  5.  
  6.  
  7. class NewMessageHandler(tornado.web.RequestHandler):
  8.     def get(self):
  9.         """Show a 'compose message' form."""
  10.         self.write('''
  11.        <form method="post">
  12.            <input type="text" name="msg">
  13.            <input type="submit">
  14.        </form>''')
  15.  
  16.         # Method exits before the HTTP request completes, thus "asynchronous"
  17.     @tornado.web.asynchronous
  18.     def post(self):
  19.         """Insert a message."""
  20.         msg = self.get_argument('msg')
  21.         # Async insert; callback is executed when insert completes
  22.         self.settings['db'].messages.insert(
  23.             {'msg': msg},
  24.             callback=self._on_response)
  25.  
  26.     def _on_response(self, result, error):
  27.         if error:
  28.             raise tornado.web.HTTPError(500, error)
  29.         else:
  30.             self.redirect('/')
  31.  
  32.  
  33. class MessagesHandler(tornado.web.RequestHandler):
  34.     @tornado.web.asynchronous
  35.     def get(self):
  36.         """Display all messages"""
  37.         self.write('<a href="/compose">Compose a message</a><br>')
  38.         self.write('<ul>')
  39.         ldb = self.settings['db']
  40.         (ldb.messages.find()
  41.         .sort([('_id', -1)])
  42.         .to_list(self._got_messages, length=10))
  43.  
  44.     def _got_messages(self, messages, error):
  45.         if error:
  46.             raise tornado.web.HTTPError(500, error)
  47.         elif messages:
  48.             self.write(messages_template.generate(messages=messages))
  49.         self.finish()
  50.      
  51. application = tornado.web.Application(
  52.     [
  53.         (r'/compose', NewMessageHandler),
  54.         (r'/', MessagesHandler)
  55.     ],
  56.         db=db
  57.     )
  58.      
  59.      
  60. messages_template = tornado.template.Template('''<ul>
  61.    {% for message in messages %}
  62.       <li>{{ message['msg'] }}</li>
  63.    {% end %}
  64.    </ul>''')
  65.      
  66.  
  67. print('Listening on http://localhost:8888')
  68. application.listen(8888)
  69. tornado.ioloop.IOLoop.instance().start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement