You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.4KB

  1. import web
  2. from forms import login_form, register_form, guestbook_form
  3. import model
  4. # Define application routes
  5. urls = (
  6. '/', 'Index',
  7. '/login', 'Login',
  8. '/logout', 'Logout',
  9. '/register', 'Register',
  10. '/guestbook', 'Guestbook',
  11. )
  12. # Initialize application using the web py framework
  13. app = web.application(urls, globals())
  14. # Get html templates
  15. render = web.template.render('templates/')
  16. # Workaround to use sessions with reloader (debugger) http://webpy.org/cookbook/session_with_reloader
  17. if web.config.get('_session') is None:
  18. session = web.session.Session(app, web.session.DiskStore("sessions"), initializer={"username": None})
  19. web.config._session = session
  20. else:
  21. session = web.config._session
  22. # Add session to global variables
  23. render._add_global(session, 'session')
  24. class Index():
  25. # Get main page
  26. def GET(self):
  27. return render.index()
  28. class Login():
  29. def GET(self):
  30. # Show other registered users if the user is logged in
  31. if session.username:
  32. friends = model.get_users()
  33. else:
  34. friends = [[],[]]
  35. return render.login(login_form, friends)
  36. # Log In
  37. def POST(self):
  38. # Validate login credential with database query
  39. data = web.input()
  40. user = model.match_user(data.username, data.password)
  41. # If there is a matching user/password in the database the user is logged in
  42. if len(user):
  43. friends = model.get_users()
  44. session.username = data.username
  45. else:
  46. friends = [[],[]]
  47. return render.login(login_form, friends)
  48. class Register:
  49. # Get the registration form
  50. def GET(self):
  51. return render.register(register_form)
  52. # Register new user in database
  53. def POST(self):
  54. data = web.input()
  55. model.set_user(data.username, data.password)
  56. raise web.seeother('/')
  57. class Guestbook:
  58. # Get guestbook entries
  59. def GET(self):
  60. entries = model.get_guestbook_entries()
  61. return render.guestbook(entries, guestbook_form)
  62. def POST(self):
  63. data = web.input()
  64. entry = web.data()
  65. print(data)
  66. print(entry)
  67. model.set_guestbook_entry(data.entry)
  68. return web.seeother("/guestbook")
  69. class Logout:
  70. # Kill session
  71. def GET(self):
  72. session.kill()
  73. session.username = None
  74. raise web.seeother('/')