PageRenderTime 29ms CodeModel.GetById 37ms RepoModel.GetById 0ms app.codeStats 0ms

/sys2do/handlers/root.py

https://github.com/LamCiuLoeng/BookStore
Python | 132 lines | 114 code | 10 blank | 8 comment | 0 complexity | 028799cc76d9509edfe14f6206f3ab5f MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. '''
  3. ###########################################
  4. # Created on 2011-9-1
  5. # @author: cl.lam
  6. # Description:
  7. ###########################################
  8. '''
  9. import logging
  10. import base
  11. import urllib
  12. import traceback
  13. import tornado
  14. from sqlalchemy.sql import and_
  15. from sqlalchemy.orm.exc import NoResultFound
  16. from sys2do.model import Attachment, User, DBSession
  17. from sys2do.util.common import makeException
  18. __all__ = ["Handler", "DownloadHandler", "PostHandler", "UserHandler", "AuthHandler"]
  19. class Handler(base.BaseHandler):
  20. def get(self):
  21. logging.info(self.locale)
  22. self.render("index.html")
  23. class DownloadHandler(base.BaseHandler):
  24. def get(self):
  25. obj = self.getOr404(Attachment, self.get_argument("id", None), "/index")
  26. f = open(obj.path, 'rb')
  27. content = "".join(f.readlines())
  28. f.close()
  29. isIE = self.request.headers["User-Agent"].find("MSIE") > -1
  30. self.set_header("Content-type", "application/x-download")
  31. if isIE :
  32. self.set_header("Content-Disposition", "attachment;filename=%s" % urllib.quote(obj.original_name.encode('utf-8')))
  33. else:
  34. self.set_header('Content-Disposition', "attachment;filename=%s" % obj.original_name)
  35. self.write(content)
  36. class PostHandler(base.BaseHandler):
  37. def post(self):
  38. result = self.upload("name")
  39. if result[0] == 0 :
  40. self.flash("OK")
  41. logging.info(result)
  42. else:
  43. self.flash("Error")
  44. self.redirect("/index")
  45. class AuthHandler(base.MasterHander):
  46. dbObj = User
  47. url_prefix = "/auth"
  48. template_prefix = "auth"
  49. action_mapping = {
  50. #name : (function,permission)
  51. "login" : ("_login", None),
  52. "check" : ("_check", None),
  53. "logout" : ("_logout", None),
  54. "register" : ("_register", None),
  55. "save_register" : ("_save_register", None),
  56. "save_update" : ("_save_update", None),
  57. }
  58. def _login(self):
  59. if self.is_user_login(): self.redirect("/index")
  60. self.render(self.template_prefix + "_login.html")
  61. def _check(self):
  62. if self.is_user_login(): self.redirect("/index")
  63. try:
  64. user = DBSession.query(User).filter(and_(User.active == 0, User.user_name == self.get_argument("user_name", None))).one()
  65. if user.password != self.get_argument("password", None): raise makeException("The password is worng!")
  66. except Exception as e:
  67. if isinstance(e, NoResultFound) : self.flash("The user is not exist!")
  68. elif getattr(e, "is_customize") : self.flash(str(e))
  69. logging.info(traceback.format_exc())
  70. self.redirect(self.get_login_url())
  71. else:
  72. self.session["is_user_login"] = True
  73. self.session["user"] = user
  74. self.session["permissions"] = [str(permission) for permission in user.permissions]
  75. self.session["groups"] = [str(group) for group in user.groups]
  76. self.session.save()
  77. self.locale #set the user's locale
  78. self.redirect("/index")
  79. def _logout(self):
  80. if not self.is_user_login(): self.redirect("/index")
  81. for key in ["is_user_login", "user", "permissions", "groups"]:
  82. if key in self.session : del self.session[key]
  83. self.session.save()
  84. self.redirect("/index")
  85. def _register(self):
  86. pass
  87. def _save_register(self):
  88. pass
  89. def _save_update(self):
  90. pass
  91. class UserHandler(base.MasterHander):
  92. dbObj = User
  93. url_prefix = "/user"
  94. template_prefix = "user"