Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from google.appengine.ext import webapp
- from google.appengine.ext import db
- from google.appengine.ext.webapp.util import run_wsgi_app
- from models.Message import Message
- import jinja2
- import os
- import re
- jinja_environment = jinja2.Environment(
- loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
- def authenticate(username):
- return username in ['Alice', 'Bob']
- class Handler(webapp.RequestHandler):
- def render(self, template, vals={}):
- template = jinja_environment.get_template(template)
- self.response.out.write(template.render(vals))
- class WelcomePage(Handler):
- def get(self):
- template_values = {'login_url' : '/login'}
- self.render('templates/index.html', template_values)
- class LoginPage(Handler):
- def get(self):
- self.render('templates/login.html')
- def post(self):
- username = self.request.get("username")
- if authenticate(username):
- self.redirect('/users/%s' % username)
- else:
- self.response.out.write("User doesn't exist. Login as Alice or Bob!")
- class UserPage(Handler):
- def get(self):
- user = re.search(r".+/users/(.+)", self.request.url).group(1)
- template_values = {'user' : user,
- 'inbox_link' : '/users/%s/messages?show=recived' % user}
- self.render('templates/userpage.html', template_values)
- class Messages(Handler):
- def get(self):
- """Display specific message if message key is given in url
- otherwise get show param and display inbox, outbox or
- render form for new message"""
- match = re.search(r".+/users/(.+)/messages(/?)([0-9]*)", self.request.url)
- user = match.group(1)
- msg_id = match.group(3)
- show = self.request.get('show')
- if msg_id:
- msg_id = int(msg_id)
- self.displayMessage(msg_id)
- else:
- if show == 'recived' or not show:
- self.showInbox(user)
- elif show == 'sent':
- self.showOutbox(user)
- elif show == 'new':
- self.showFormForNewMsg()
- else:
- self.response.out.write("Error in Message.get()")
- def showInbox(self, user):
- messages = list(db.GqlQuery("""SELECT * FROM Message
- WHERE msg_to=:u
- ORDER BY timestamp DESC""", u = user))
- welcome = "inbox"
- self.displayMessages(messages, welcome, user)
- def showOutbox(self, user):
- messages = list(db.GqlQuery("""SELECT * FROM Message
- WHERE msg_from=:u
- ORDER BY timestamp DESC""", u = user))
- welcome = "outbox"
- self.displayMessages(messages, welcome, user)
- def displayMessages(self, messages, welcome, user):
- """Inbox and Outbox use the same template
- hash other contains values for making link
- from inbox to outbox and vice versa"""
- if welcome == 'inbox':
- other = { 'name' : 'outbox', 'get_param' : 'sent' }
- else:
- other = { 'name' : 'inbox', 'get_param' : 'recived' }
- template_values = {'welcome' : welcome,
- 'messages' : messages,
- 'user' : user,
- 'other' : other}
- self.render('templates/displayMessages.html', template_values)
- def displayMessage(self, msg_id):
- message = Message.get_by_id(msg_id)
- template_values = { 'message' : message }
- self.render('templates/displayMessage.html', template_values)
- def showFormForNewMsg(self):
- self.render('templates/newMessage.html')
- def post(self):
- msg_from = re.search(r".+/users/(.+)/messages", self.request.url).group(1)
- msg_to = self.request.get('msg_to')
- title = self.request.get('title')
- message = self.request.get('message')
- if msg_to and title and message:
- msg = Message(msg_from = msg_from,
- msg_to = msg_to,
- title = title,
- message = message)
- msg.put()
- self.redirect('/')
- else:
- self.response.out.write("Error in Messages.post()")
- msgapp = webapp.WSGIApplication([('/', WelcomePage),
- ('/login', LoginPage),
- (r'/users/[a-zA-Z0-9]+$', UserPage),
- (r'/users/[a-zA-Z0-9]+/messages.*', Messages)])
- def main():
- run_wsgi_app(msgapp)
- if __name__=="__main__":
- main()
Add Comment
Please, Sign In to add comment